Android实例项目【智能家居系统】实现数据库登录注册+动画效果+网页跳转+短信发送!!!

整体实现效果展示

智能家居系统

页面一

1.实现效果

用户进行注册(后登录),通过数据库存储数据用户的账号和密码。

点击记住密码保存账号和密码信息。

同时注册界面实现淡入淡出的动画效果

2.数据库代码

数据库存储核心代码:

java 复制代码
//数据库的创建和更新(删除)
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_USERS_TABLE = "CREATE TABLE " + TABLE_USERS + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + KEY_USERNAME + " TEXT UNIQUE,"
                + KEY_PASSWORD + " TEXT" + ")";
        db.execSQL(CREATE_USERS_TABLE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
        onCreate(db);
    }

3.登录代码

登录界面核心代码:

java 复制代码
//与数据库进行核对(核对账号和密码)
                if (databaseHelper.checkUser(username, password)) {
                    //检查是否勾选来保存信息(将信息保存到sharedPreferences中用于转动填充)
                    if (rememberPasswordCheckBox.isChecked()) {
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.putBoolean("remember", true);
                        editor.putString("username", username);
                        editor.putString("password", password);
                        editor.apply();
                    } else {
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.clear();
                        editor.apply();
                    }
                    //退出动画(登录动画效果与进入动画一致)
                    Animation slideDown = AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_down);
                    loginContainer.startAnimation(slideDown);
                    //监听处理动画是否结束
                    slideDown.setAnimationListener(new AnimationListener() {
                        @Override
                        public void onAnimationStart(Animation animation) {}
                        @Override
                        public void onAnimationEnd(Animation animation) {
                            //动画结束后跳转到MainActivity2
                            Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                            intent.putExtra("username", username);
                            startActivity(intent);
                            finish();
                        }
                        @Override
                        public void onAnimationRepeat(Animation animation) {}
                    });
                } else {
                    Toast.makeText(MainActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();
                }

4.动画代码

动画效果核心代码:

javascript 复制代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
<!--    动画结束后保持最终状态-->
    <translate
        android:duration="1500"
        android:fromYDelta="100%"
        android:toYDelta="0%"/>
    <alpha
        android:duration="1500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"/>
</set>

页面二

1.实现效果

通过数据库将注册的账号和密码进行存储。

2.注册代码

java 复制代码
registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = regUsernameEditText.getText().toString().trim();
                String password = regPasswordEditText.getText().toString().trim();
                if (username.isEmpty() || password.isEmpty()) {
                    Toast.makeText(MainActivity3.this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (databaseHelper.userExists(username)) {
                    Toast.makeText(MainActivity3.this, "用户名已存在", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (databaseHelper.addUser(username, password)) {
                    Toast.makeText(MainActivity3.this, "注册成功", Toast.LENGTH_SHORT).show();
                    finish();
                } else {
                    Toast.makeText(MainActivity3.this, "注册失败", Toast.LENGTH_SHORT).show();
                }
            }
        });

页面三

1.实现效果

开启灯光/风扇。

添加设备,实现设备插入到当前页。

点击设备选购,跳转到淘宝页面。

点击问卷调查,实现问卷调查题目,整合后可实现短信发送。

2.开启灯光/风扇

java 复制代码
//开关灯
    private void toggleLight() {
        isLightOn = !isLightOn;
        int colorFrom = isLightOn ? 0xFF9E9E9E : 0xFFFFD600;
        int colorTo = isLightOn ? 0xFFFFD600 : 0xFF9E9E9E;

        ObjectAnimator colorAnim = ObjectAnimator.ofObject(lightIcon, "colorFilter",
                new ArgbEvaluator(), colorFrom, colorTo);
        colorAnim.setDuration(300);
        colorAnim.start();

        lightButton.setText(isLightOn ? "关闭灯光" : "开启灯光");
    }

    //开关风扇
    private void toggleFan() {
        isFanOn = !isFanOn;
        if (isFanOn) {
            fanIcon.startAnimation(fanRotation);
            fanButton.setText("关闭风扇");
        } else {
            fanIcon.clearAnimation();
            fanButton.setText("开启风扇");
        }
    }

3.添加设备接收

添加设备接收处理

java 复制代码
//处理返回数据
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 100 && resultCode == RESULT_OK && data != null) {
            String deviceName = data.getStringExtra("deviceName");
            int imageResId = data.getIntExtra("imageResId", R.drawable.photo_home);
            addNewDeviceCard(deviceName, imageResId);
        }

        if (requestCode == 200 && resultCode == RESULT_OK && data != null) {
            String surveyResult = data.getStringExtra("surveyResult");
            showSmsDialog(surveyResult);
        }
    }

4.淘宝跳转

java 复制代码
//跳转到淘宝
    private void openTaobao() {
        try {
            //尝试打开淘宝应用
            //创建一个隐式 Intent,通过 ACTION_VIEW 动作和淘宝的协议链接 taobao://s.taobao.com 尝试唤起淘宝应用
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("taobao://s.taobao.com"));
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            try {
                //如果淘宝应用未安装,跳转到应用商店下载页面
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.taobao.taobao"));
                startActivity(intent);
            } catch (Exception ex) {
                //如果应用商店也无法打开,提示用户检查网络或手动下载
                Toast.makeText(this, "无法打开淘宝应用。请检查网络连接或手动前往应用商店下载。", Toast.LENGTH_LONG).show();
            }
        }
    }

5.问卷调查

采用AlterDialog.Builder构建数据。

java 复制代码
private void showSmsDialog(String surveyResult) {
        //实例化一个AlertDialog.Builder对象,用于构建对话框
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("问卷调查结果");
        builder.setMessage("即将发送问卷结果:\n\n" + surveyResult);
        builder.setPositiveButton("发送短信", (dialog, which) -> {
            Intent smsIntent = new Intent(Intent.ACTION_VIEW);
            //设置短信URI:使用smsto协议指定这是一个短信意图
            smsIntent.setData(Uri.parse("smsto:"));
            //将问卷调查结果加到Intent中
            smsIntent.putExtra("sms_body", surveyResult);
            //启动短信
            startActivity(smsIntent);
        });
        builder.setNegativeButton("取消", null);
        builder.show();
    }

页面四

1.实现效果

设备添加到上一页中

2.添加设备发送

java 复制代码
//返回按钮(销毁当前页面)
        backButton.setOnClickListener(v -> finish());

        //图片切换
        deviceImage.setOnClickListener(v -> {
            currentImageIndex = (currentImageIndex + 1) % deviceImages.length;
            deviceImage.setImageResource(deviceImages[currentImageIndex]);
        });

        //添加设备按钮
        packButton.setOnClickListener(v -> {
            String deviceName = deviceNameInput.getText().toString().trim();
            if (deviceName.isEmpty()) {
                Toast.makeText(this, "请输入设备名称", Toast.LENGTH_SHORT).show();
                return;
            }
            //返回数据到MainActivity2
            Intent resultIntent = new Intent();
            resultIntent.putExtra("deviceName", deviceName);
            resultIntent.putExtra("imageResId", deviceImages[currentImageIndex]);
            setResult(RESULT_OK, resultIntent);
            finish();
        });

页面五

1.实现效果

将问卷调查信息发送到AlterDialog.Builder中。

2.问卷内容

java 复制代码
// 处理使用场景多选
        StringBuilder usageTypes = new StringBuilder();
        if (lightingCheck.isChecked()) usageTypes.append("智能灯光, ");
        if (securityCheck.isChecked()) usageTypes.append("安防系统, ");
        if (comfortCheck.isChecked()) usageTypes.append("舒适控制, ");
        if (energyCheck.isChecked()) usageTypes.append("节能管理, ");
        if (otherCheck.isChecked()) usageTypes.append("其他");

        String feedback = feedbackEditText.getText().toString();

        // 构建结果字符串
        String result = "智能家居使用情况调查结果:\n\n" +
                "年龄: " + age + "\n" +
                "使用频率: " + frequency + "\n" +
                "满意度: " + satisfaction + "\n" +
                "使用场景: " + usageTypes.toString() + "\n" +
                "意见建议: " + feedback;

        // 返回结果
        Intent resultIntent = new Intent();
        resultIntent.putExtra("surveyResult", result);
        setResult(RESULT_OK, resultIntent);
        finish();
    }

    private String getSelectedFrequency() {
        int selectedId = frequencyGroup.getCheckedRadioButtonId();
        if (selectedId == R.id.dailyRadio) {
            return "每天";
        } else if (selectedId == R.id.weeklyRadio) {
            return "每周";
        } else if (selectedId == R.id.monthlyRadio) {
            return "每月";
        } else if (selectedId == R.id.rarelyRadio) {
            return "很少";
        }
        return "未选择";
    }

    private String getSelectedSatisfaction() {
        int selectedId = satisfactionGroup.getCheckedRadioButtonId();
        if (selectedId == R.id.verySatisfiedRadio) {
            return "非常满意";
        } else if (selectedId == R.id.satisfiedRadio) {
            return "满意";
        } else if (selectedId == R.id.neutralRadio) {
            return "一般";
        } else if (selectedId == R.id.unsatisfiedRadio) {
            return "不满意";
        }
        return "未选择";
    }

感谢各位读者的阅读!希望大家给出一键三连,多多支持原创。有错误和不解的地方,欢迎各位读者在评论区讨论,我也会不断学习不断改进,做出更加优质的作品!!!

相关资源获取WX搜索:JannineSpr

相关推荐
jiayou642 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
二流小码农4 小时前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少5 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker5 小时前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋5 小时前
Android 协程时代,Handler 应该退休了吗?
android
NineData14 小时前
NineData 迁移评估功能正式上线
数据库·dba
火柴就是我19 小时前
让我们实现一个更好看的内部阴影按钮
android·flutter
NineData19 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师1 天前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
砖厂小工1 天前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github