整体实现效果展示
智能家居系统
页面一
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