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

发布于:2025-06-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

整体实现效果展示

智能家居系统

页面一

1.实现效果

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

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

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

2.数据库代码

数据库存储核心代码:

//数据库的创建和更新(删除)
    @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.登录代码

登录界面核心代码:

//与数据库进行核对(核对账号和密码)
                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.动画代码

动画效果核心代码:

<?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.注册代码

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.开启灯光/风扇

//开关灯
    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.添加设备接收

添加设备接收处理

//处理返回数据
@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.淘宝跳转

//跳转到淘宝
    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构建数据。

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.添加设备发送 

//返回按钮(销毁当前页面)
        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.问卷内容

// 处理使用场景多选
        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


网站公告

今日签到

点亮在社区的每一天
去签到