master
g_miss_n 3 months ago
parent 5de5711b6f
commit eaf302dde5

@ -72,57 +72,57 @@ public class HistoryActivity extends Activity {
showStatistics(); showStatistics();
} }
private void initViews() { private void initViews() { // 初始化视图组件
listViewHistory = findViewById(R.id.listViewHistory); listViewHistory = findViewById(R.id.listViewHistory); // 获取ListView
textViewStats = findViewById(R.id.textViewStats); textViewStats = findViewById(R.id.textViewStats); // 获取TextView
buttonShowAll = findViewById(R.id.buttonShowAll); buttonShowAll = findViewById(R.id.buttonShowAll); // 获取Button
buttonShowRecent = findViewById(R.id.buttonShowRecent); buttonShowRecent = findViewById(R.id.buttonShowRecent); // 获取Button
buttonClearData = findViewById(R.id.buttonClearData); buttonClearData = findViewById(R.id.buttonClearData); // 获取Button
buttonRefresh = findViewById(R.id.buttonRefresh); buttonRefresh = findViewById(R.id.buttonRefresh); // 获取Button
// 初始化筛选和查询组件 // 初始化筛选和查询组件
spinnerFilter = findViewById(R.id.spinnerFilter); spinnerFilter = findViewById(R.id.spinnerFilter); // 获取Spinner
buttonFilter = findViewById(R.id.buttonFilter); buttonFilter = findViewById(R.id.buttonFilter); // 获取Button
editStartDate = findViewById(R.id.editStartDate); editStartDate = findViewById(R.id.editStartDate); // 获取EditText
editEndDate = findViewById(R.id.editEndDate); editEndDate = findViewById(R.id.editEndDate); // 获取EditText
buttonStartDate = findViewById(R.id.buttonStartDate); buttonStartDate = findViewById(R.id.buttonStartDate); // 获取Button
buttonEndDate = findViewById(R.id.buttonEndDate); buttonEndDate = findViewById(R.id.buttonEndDate); // 获取Button
buttonQuery = findViewById(R.id.buttonQuery); buttonQuery = findViewById(R.id.buttonQuery); // 获取Button
// 初始化ListView // 初始化ListView
displayList = new ArrayList<>(); displayList = new ArrayList<>(); // 创建ArrayList
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, displayList); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, displayList); // 创建ArrayAdapter
listViewHistory.setAdapter(adapter); listViewHistory.setAdapter(adapter); // 设置ListView的Adapter
// 设置筛选下拉框 // 设置筛选下拉框
setupFilterSpinner(); setupFilterSpinner(); // 设置筛选下拉框
// 设置按钮点击事件 // 设置按钮点击事件
buttonShowAll.setOnClickListener(new View.OnClickListener() { buttonShowAll.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
loadAllData(); loadAllData(); // 加载所有数据
} }
}); });
buttonShowRecent.setOnClickListener(new View.OnClickListener() { buttonShowRecent.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
loadRecentData(); loadRecentData(); // 加载最近数据
} }
}); });
buttonClearData.setOnClickListener(new View.OnClickListener() { buttonClearData.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
clearAllData(); clearAllData(); // 清空所有数据
} }
}); });
buttonRefresh.setOnClickListener(new View.OnClickListener() { buttonRefresh.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
refreshData(); refreshData(); // 刷新数据
} }
}); });
@ -130,7 +130,7 @@ public class HistoryActivity extends Activity {
buttonFilter.setOnClickListener(new View.OnClickListener() { buttonFilter.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
performFilter(); performFilter(); // 执行筛选
} }
}); });
@ -138,14 +138,14 @@ public class HistoryActivity extends Activity {
buttonStartDate.setOnClickListener(new View.OnClickListener() { buttonStartDate.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
showDateTimePicker(editStartDate, true); showDateTimePicker(editStartDate, true); // 显示日期时间选择器
} }
}); });
buttonEndDate.setOnClickListener(new View.OnClickListener() { buttonEndDate.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
showDateTimePicker(editEndDate, false); showDateTimePicker(editEndDate, false); // 显示日期时间选择器
} }
}); });
@ -153,7 +153,7 @@ public class HistoryActivity extends Activity {
buttonQuery.setOnClickListener(new View.OnClickListener() { buttonQuery.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
performTimeRangeQuery(); performTimeRangeQuery(); // 执行时间区段查询
} }
}); });
} }
@ -163,11 +163,11 @@ public class HistoryActivity extends Activity {
*/ */
private void loadAllData() { private void loadAllData() {
try { try {
List<SensorData> dataList = databaseHelper.getAllSensorData(); List<SensorData> dataList = databaseHelper.getAllSensorData(); // 获取所有数据
updateDisplayList(dataList); updateDisplayList(dataList); // 更新显示列表
Toast.makeText(this, "已加载所有数据,共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "已加载所有数据,共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
@ -176,11 +176,11 @@ public class HistoryActivity extends Activity {
*/ */
private void loadRecentData() { private void loadRecentData() {
try { try {
List<SensorData> dataList = databaseHelper.getRecentData(50); // 显示最近50条记录 List<SensorData> dataList = databaseHelper.getRecentData(50); // 获取最近50条记录
updateDisplayList(dataList); updateDisplayList(dataList); // 更新显示列表
Toast.makeText(this, "已加载最近 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "已加载最近 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
@ -188,36 +188,36 @@ public class HistoryActivity extends Activity {
* *
*/ */
private void updateDisplayList(List<SensorData> dataList) { private void updateDisplayList(List<SensorData> dataList) {
displayList.clear(); displayList.clear(); // 清空显示列表
if (dataList.isEmpty()) { if (dataList.isEmpty()) { // 如果数据列表为空
displayList.add("暂无数据"); displayList.add("暂无数据"); // 添加暂无数据
} else { } else {
for (SensorData data : dataList) { for (SensorData data : dataList) {
String displayText = formatDataForDisplay(data); String displayText = formatDataForDisplay(data); // 格式化数据为显示文本
displayList.add(displayText); displayList.add(displayText); // 添加显示文本
} }
} }
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged(); // 通知Adapter数据已改变
} }
/** /**
* *
*/ */
private String formatDataForDisplay(SensorData data) { private String formatDataForDisplay(SensorData data) {
String triggerInfo = data.isTriggered() ? " [⚠️触发: " + data.getTriggerConditions() + "]" : " [✅正常]"; String triggerInfo = data.isTriggered() ? " [⚠️触发: " + data.getTriggerConditions() + "]" : " [✅正常]"; // 获取触发信息
return String.format(Locale.getDefault(), return String.format(Locale.getDefault(),
"%s%s\n温度:%d℃ 湿度:%d%% 光照:%d%% 距离:%dcm 时间:%dmin 模式:%s", "%s%s\n温度:%d℃ 湿度:%d%% 光照:%d%% 距离:%dcm 时间:%dmin 模式:%s", // 格式化数据为显示文本
data.getTimestamp(), data.getTimestamp(), // 获取时间戳
triggerInfo, triggerInfo, // 添加触发信息
data.getTemperature(), data.getTemperature(), // 获取温度
data.getHumidity(), data.getHumidity(), // 获取湿度
data.getLight(), data.getLight(), // 获取光照
data.getDistance(), data.getDistance(), // 获取距离
data.getTimeMinutes(), data.getTimeMinutes(), // 获取时间(分钟)
data.getMode().equals("auto") ? "自动" : "手动" data.getMode().equals("auto") ? "自动" : "手动" // 获取模式
); );
} }
@ -226,39 +226,39 @@ public class HistoryActivity extends Activity {
*/ */
private void showStatistics() { private void showStatistics() {
try { try {
DataStatistics stats = databaseHelper.getDataStatistics(); DataStatistics stats = databaseHelper.getDataStatistics(); // 获取统计数据
if (stats.getTotalRecords() == 0) { if (stats.getTotalRecords() == 0) { // 如果总记录数为0
textViewStats.setText("暂无统计数据"); textViewStats.setText("暂无统计数据"); // 显示暂无统计数据
return; return;
} }
String statsText = String.format(Locale.getDefault(), String statsText = String.format(Locale.getDefault(), // 格式化数据为显示文本
"📊 数据统计信息\n\n" + "📊 数据统计信息\n\n" + // 显示统计信息
"📝 总记录数: %d 条\n\n" + "📝 总记录数: %d 条\n\n" + // 显示总记录数
"🌡️ 温度统计:\n" + "🌡️ 温度统计:\n" + // 显示温度统计
" 最低: %d℃\n" + " 最低: %d℃\n" + // 显示最低温度
" 最高: %d℃\n" + " 最高: %d℃\n" + // 显示最高温度
" 平均: %.1f℃\n\n" + " 平均: %.1f℃\n\n" + // 显示平均温度
"💧 湿度统计:\n" + "💧 湿度统计:\n" + // 显示湿度统计
" 最低: %d%%\n" + " 最低: %d%%\n" + // 显示最低湿度
" 最高: %d%%\n" + " 最高: %d%%\n" + // 显示最高湿度
" 平均: %.1f%%\n\n" + " 平均: %.1f%%\n\n" + // 显示平均湿度
"💡 光照统计:\n" + "💡 光照统计:\n" + // 显示光照统计
" 最低: %d%%\n" + " 最低: %d%%\n" + // 显示最低光照
" 最高: %d%%\n" + " 最高: %d%%\n" + // 显示最高光照
" 平均: %.1f%%", " 平均: %.1f%%", // 显示平均光照
stats.getTotalRecords(), stats.getTotalRecords(), // 获取总记录数
stats.getMinTemperature(), stats.getMaxTemperature(), stats.getAvgTemperature(), stats.getMinTemperature(), stats.getMaxTemperature(), stats.getAvgTemperature(), // 获取温度统计
stats.getMinHumidity(), stats.getMaxHumidity(), stats.getAvgHumidity(), stats.getMinHumidity(), stats.getMaxHumidity(), stats.getAvgHumidity(), // 获取湿度统计
stats.getMinLight(), stats.getMaxLight(), stats.getAvgLight() stats.getMinLight(), stats.getMaxLight(), stats.getAvgLight() // 获取光照统计
); );
textViewStats.setText(statsText); textViewStats.setText(statsText); // 设置统计信息
} catch (Exception e) { } catch (Exception e) {
textViewStats.setText("统计信息加载失败: " + e.getMessage()); textViewStats.setText("统计信息加载失败: " + e.getMessage()); // 显示统计信息加载失败
} }
} }
@ -267,14 +267,14 @@ public class HistoryActivity extends Activity {
*/ */
private void clearAllData() { private void clearAllData() {
try { try {
databaseHelper.clearAllData(); databaseHelper.clearAllData(); // 清空所有数据
displayList.clear(); displayList.clear(); // 清空显示列表
displayList.add("所有数据已清空"); displayList.add("所有数据已清空"); // 添加所有数据已清空
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged(); // 通知Adapter数据已改变
showStatistics(); // 更新统计信息 showStatistics(); // 更新统计信息
Toast.makeText(this, "所有数据已清空", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "所有数据已清空", Toast.LENGTH_SHORT).show(); // 显示Toast
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "清空数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "清空数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
@ -282,19 +282,19 @@ public class HistoryActivity extends Activity {
* *
*/ */
private void refreshData() { private void refreshData() {
loadRecentData(); loadRecentData(); // 加载最近数据
showStatistics(); showStatistics(); // 显示统计信息
Toast.makeText(this, "数据已刷新", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "数据已刷新", Toast.LENGTH_SHORT).show(); // 显示Toast
} }
/** /**
* *
*/ */
private void setupFilterSpinner() { private void setupFilterSpinner() {
String[] filterOptions = {"全部数据", "已触发", "未触发"}; String[] filterOptions = {"全部数据", "已触发", "未触发"}; // 设置筛选选项
ArrayAdapter<String> filterAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, filterOptions); ArrayAdapter<String> filterAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, filterOptions); // 创建ArrayAdapter
filterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); filterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 设置下拉框样式
spinnerFilter.setAdapter(filterAdapter); spinnerFilter.setAdapter(filterAdapter); // 设置Spinner的Adapter
} }
/** /**
@ -302,36 +302,36 @@ public class HistoryActivity extends Activity {
*/ */
private void performFilter() { private void performFilter() {
try { try {
int selectedPosition = spinnerFilter.getSelectedItemPosition(); int selectedPosition = spinnerFilter.getSelectedItemPosition(); // 获取选中的位置
List<SensorData> dataList; List<SensorData> dataList; // 创建数据列表
switch (selectedPosition) { switch (selectedPosition) {
case 0: // 全部数据 case 0: // 全部数据
dataList = databaseHelper.getAllSensorData(); dataList = databaseHelper.getAllSensorData(); // 获取所有数据
break; break;
case 1: // 已触发 case 1: // 已触发
dataList = databaseHelper.getDataByTriggerStatus(true); dataList = databaseHelper.getDataByTriggerStatus(true); // 获取已触发数据
break; break;
case 2: // 未触发 case 2: // 未触发
dataList = databaseHelper.getDataByTriggerStatus(false); dataList = databaseHelper.getDataByTriggerStatus(false); // 获取未触发数据
break; break;
default: default:
dataList = databaseHelper.getAllSensorData(); dataList = databaseHelper.getAllSensorData(); // 获取所有数据
break; break;
} }
updateDisplayList(dataList); updateDisplayList(dataList); // 更新显示列表
String filterName = (String) spinnerFilter.getSelectedItem(); String filterName = (String) spinnerFilter.getSelectedItem(); // 获取选中的筛选名称
Toast.makeText(this, "已筛选 " + filterName + ",共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "已筛选 " + filterName + ",共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "筛选失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "筛选失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
/** /**
* *
*/ */
private void showDateTimePicker(final EditText editText, boolean isStartDate) { private void showDateTimePicker(final EditText editText, boolean isStartDate) { // 显示日期时间选择器
// 先显示日期选择器 // 先显示日期选择器
DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override @Override
@ -343,20 +343,20 @@ public class HistoryActivity extends Activity {
// 格式化并设置到EditText // 格式化并设置到EditText
String dateTime = String.format(Locale.getDefault(), "%04d-%02d-%02d %02d:%02d:00", String dateTime = String.format(Locale.getDefault(), "%04d-%02d-%02d %02d:%02d:00",
year, month + 1, dayOfMonth, hourOfDay, minute); year, month + 1, dayOfMonth, hourOfDay, minute);
editText.setText(dateTime); editText.setText(dateTime); // 设置到EditText
} }
}, 0, 0, true); }, 0, 0, true); // 创建TimePickerDialog
timePickerDialog.show(); timePickerDialog.show(); // 显示TimePickerDialog
} }
}, 2024, 0, 1); }, 2024, 0, 1); // 创建DatePickerDialog
// 如果是结束时间,默认设置为当前时间 // 如果是结束时间,默认设置为当前时间
if (!isStartDate) { if (!isStartDate) {
Date now = new Date(); Date now = new Date();
datePickerDialog.updateDate(now.getYear() + 1900, now.getMonth(), now.getDate()); datePickerDialog.updateDate(now.getYear() + 1900, now.getMonth(), now.getDate()); // 更新日期
} }
datePickerDialog.show(); datePickerDialog.show(); // 显示DatePickerDialog
} }
/** /**
@ -364,23 +364,23 @@ public class HistoryActivity extends Activity {
*/ */
private void performTimeRangeQuery() { private void performTimeRangeQuery() {
try { try {
String startDateStr = editStartDate.getText().toString().trim(); String startDateStr = editStartDate.getText().toString().trim(); // 获取开始时间
String endDateStr = editEndDate.getText().toString().trim(); String endDateStr = editEndDate.getText().toString().trim(); // 获取结束时间
if (TextUtils.isEmpty(startDateStr) || TextUtils.isEmpty(endDateStr)) { if (TextUtils.isEmpty(startDateStr) || TextUtils.isEmpty(endDateStr)) {
Toast.makeText(this, "请选择开始时间和结束时间", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "请选择开始时间和结束时间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return;
} }
// 验证时间格式(简单验证) // 验证时间格式(简单验证)
if (startDateStr.length() < 19 || endDateStr.length() < 19) { if (startDateStr.length() < 19 || endDateStr.length() < 19) {
Toast.makeText(this, "时间格式不正确请使用yyyy-MM-dd HH:mm:ss", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "时间格式不正确请使用yyyy-MM-dd HH:mm:ss", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return;
} }
// 获取筛选条件 // 获取筛选条件
int filterPosition = spinnerFilter.getSelectedItemPosition(); int filterPosition = spinnerFilter.getSelectedItemPosition(); // 获取选中的位置
Boolean triggerFilter = null; Boolean triggerFilter = null; // 创建触发过滤器
if (filterPosition == 1) { if (filterPosition == 1) {
triggerFilter = true; // 已触发 triggerFilter = true; // 已触发
} else if (filterPosition == 2) { } else if (filterPosition == 2) {
@ -388,14 +388,14 @@ public class HistoryActivity extends Activity {
} }
// 执行查询 // 执行查询
List<SensorData> dataList = databaseHelper.getDataByDateRangeAndTriggerStatus(startDateStr, endDateStr, triggerFilter); List<SensorData> dataList = databaseHelper.getDataByDateRangeAndTriggerStatus(startDateStr, endDateStr, triggerFilter); // 执行查询
updateDisplayList(dataList); updateDisplayList(dataList); // 更新显示列表
String filterName = (String) spinnerFilter.getSelectedItem(); String filterName = (String) spinnerFilter.getSelectedItem(); // 获取选中的筛选名称
Toast.makeText(this, "查询完成:" + filterName + " " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "查询完成:" + filterName + " " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "查询失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "查询失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
@ -403,7 +403,7 @@ public class HistoryActivity extends Activity {
* *
*/ */
public void onBackButtonClicked(View view) { public void onBackButtonClicked(View view) {
finish(); finish(); // 结束当前Activity
} }
/** /**
@ -411,26 +411,26 @@ public class HistoryActivity extends Activity {
*/ */
public void onExportButtonClicked(View view) { public void onExportButtonClicked(View view) {
try { try {
List<SensorData> allData = databaseHelper.getAllSensorData(); List<SensorData> allData = databaseHelper.getAllSensorData(); // 获取所有数据
if (allData.isEmpty()) { if (allData.isEmpty()) { // 如果数据列表为空
Toast.makeText(this, "暂无数据可导出", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "暂无数据可导出", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return;
} }
// 创建导出文件 // 创建导出文件
File csvFile = createExportFile(allData); File csvFile = createExportFile(allData); // 创建导出文件
if (csvFile != null && csvFile.exists()) { if (csvFile != null && csvFile.exists()) { // 如果文件存在
// 文件创建成功,尝试打开 // 文件创建成功,尝试打开
openCsvFile(csvFile); openCsvFile(csvFile); // 打开CSV文件
Toast.makeText(this, "数据导出成功!共 " + allData.size() + " 条记录\n文件位置: " + csvFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); Toast.makeText(this, "数据导出成功!共 " + allData.size() + " 条记录\n文件位置: " + csvFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); // 显示Toast
} else { } else {
Toast.makeText(this, "文件创建失败,请检查存储权限", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "文件创建失败,请检查存储权限", Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "导出数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "导出数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
@ -440,29 +440,29 @@ public class HistoryActivity extends Activity {
private File createExportFile(List<SensorData> dataList) { private File createExportFile(List<SensorData> dataList) {
try { try {
// 创建文件名(带时间戳) // 创建文件名(带时间戳)
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); // 获取当前时间戳
String fileName = "战场探测数据_" + timestamp + ".csv"; String fileName = "战场探测数据_" + timestamp + ".csv"; // 创建文件名
// 获取下载目录 // 获取下载目录
File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); // 获取下载目录
if (!downloadsDir.exists()) { if (!downloadsDir.exists()) { // 如果下载目录不存在
downloadsDir.mkdirs(); downloadsDir.mkdirs(); // 创建下载目录
} }
File csvFile = new File(downloadsDir, fileName); File csvFile = new File(downloadsDir, fileName); // 创建CSV文件
// 写入CSV数据 // 写入CSV数据
FileWriter writer = new FileWriter(csvFile, false); FileWriter writer = new FileWriter(csvFile, false); // 创建FileWriter
// 写入BOM确保Excel正确显示中文 // 写入BOM确保Excel正确显示中文
writer.write('\ufeff'); writer.write('\ufeff'); // 写入BOM
// 写入标题头 // 写入标题头
writer.write("数据记录时间,触发状态,触发条件,温度(℃),湿度(%),光照(%),距离(cm),运行时间(min),工作模式\n"); writer.write("数据记录时间,触发状态,触发条件,温度(℃),湿度(%),光照(%),距离(cm),运行时间(min),工作模式\n"); // 写入标题头
// 写入数据行 // 写入数据行
for (SensorData data : dataList) { for (SensorData data : dataList) {
writer.write(String.format(Locale.getDefault(), writer.write(String.format(Locale.getDefault(), // 写入数据行
"%s,%s,\"%s\",%d,%d,%d,%d,%d,%s\n", "%s,%s,\"%s\",%d,%d,%d,%d,%d,%s\n",
data.getTimestamp(), data.getTimestamp(),
data.isTriggered() ? "已触发" : "正常", data.isTriggered() ? "已触发" : "正常",
@ -476,12 +476,12 @@ public class HistoryActivity extends Activity {
)); ));
} }
writer.close(); writer.close(); // 关闭FileWriter
return csvFile; return csvFile; // 返回CSV文件
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace(); // 打印异常
return null; return null; // 返回null
} }
} }
@ -490,34 +490,34 @@ public class HistoryActivity extends Activity {
*/ */
private void openCsvFile(File csvFile) { private void openCsvFile(File csvFile) {
try { try {
Uri fileUri = Uri.fromFile(csvFile); Uri fileUri = Uri.fromFile(csvFile); // 获取文件URI
// 尝试用Excel打开 // 尝试用Excel打开
Intent excelIntent = new Intent(Intent.ACTION_VIEW); Intent excelIntent = new Intent(Intent.ACTION_VIEW);
excelIntent.setDataAndType(fileUri, "application/vnd.ms-excel"); excelIntent.setDataAndType(fileUri, "application/vnd.ms-excel"); // 设置数据类型
excelIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); excelIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 设置标志
if (excelIntent.resolveActivity(getPackageManager()) != null) { if (excelIntent.resolveActivity(getPackageManager()) != null) {
startActivity(excelIntent); startActivity(excelIntent); // 启动Activity
return; return; // 返回
} }
// 如果没有Excel尝试用文本编辑器打开 // 如果没有Excel尝试用文本编辑器打开
Intent textIntent = new Intent(Intent.ACTION_VIEW); Intent textIntent = new Intent(Intent.ACTION_VIEW);
textIntent.setDataAndType(fileUri, "text/plain"); textIntent.setDataAndType(fileUri, "text/plain"); // 设置数据类型
textIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); textIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 设置标志
if (textIntent.resolveActivity(getPackageManager()) != null) { if (textIntent.resolveActivity(getPackageManager()) != null) {
startActivity(textIntent); startActivity(textIntent); // 启动Activity
return; return; // 返回
} }
// 如果都没有,提供分享选项 // 如果都没有,提供分享选项
shareFile(csvFile); shareFile(csvFile); // 分享文件
} catch (Exception e) { } catch (Exception e) {
// 如果打开失败,尝试分享文件 // 如果打开失败,尝试分享文件
shareFile(csvFile); shareFile(csvFile); // 分享文件
} }
} }
@ -526,17 +526,17 @@ public class HistoryActivity extends Activity {
*/ */
private void shareFile(File csvFile) { private void shareFile(File csvFile) {
try { try {
Uri fileUri = Uri.fromFile(csvFile); Uri fileUri = Uri.fromFile(csvFile); // 获取文件URI
Intent shareIntent = new Intent(Intent.ACTION_SEND); Intent shareIntent = new Intent(Intent.ACTION_SEND); // 创建Intent
shareIntent.setType("text/csv"); shareIntent.setType("text/csv"); // 设置数据类型
shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); // 设置数据
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "战场探测系统数据导出"); shareIntent.putExtra(Intent.EXTRA_SUBJECT, "战场探测系统数据导出"); // 设置主题
shareIntent.putExtra(Intent.EXTRA_TEXT, "战场环境探测系统的传感器数据记录文件"); shareIntent.putExtra(Intent.EXTRA_TEXT, "战场环境探测系统的传感器数据记录文件"); // 设置文本
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 设置标志
Intent chooser = Intent.createChooser(shareIntent, "选择应用打开CSV文件"); Intent chooser = Intent.createChooser(shareIntent, "选择应用打开CSV文件"); // 创建Intent
startActivity(chooser); startActivity(chooser); // 启动Activity
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "无法打开文件,但已保存到下载文件夹: " + csvFile.getName(), Toast.LENGTH_LONG).show(); Toast.makeText(this, "无法打开文件,但已保存到下载文件夹: " + csvFile.getName(), Toast.LENGTH_LONG).show();
@ -547,7 +547,7 @@ public class HistoryActivity extends Activity {
* *
*/ */
private String getCurrentTimestamp() { private String getCurrentTimestamp() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 创建SimpleDateFormat
return sdf.format(new Date()); return sdf.format(new Date()); // 返回当前时间戳
} }
} }

@ -65,13 +65,13 @@ public class MainActivity extends Activity {
private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter(); //获取本地蓝牙适配器,即蓝牙设备 private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter(); //获取本地蓝牙适配器,即蓝牙设备
// 数据库相关变量 // 数据库相关变量
private DatabaseHelper databaseHelper; private DatabaseHelper databaseHelper; // 数据库助手
private int currentTemperature = 0; private int currentTemperature = 0; // 当前温度
private int currentHumidity = 0; private int currentHumidity = 0; // 当前湿度
private int currentLight = 0; private int currentLight = 0; // 当前光照强度
private int currentDistance = 0; private int currentDistance = 0; // 当前距离
private int currentTimeMinutes = 0; private int currentTimeMinutes = 0; // 当前时间(分钟)
private String currentMode = "auto"; private String currentMode = "auto"; // 当前模式
// 数据记录设置 // 数据记录设置
private boolean autoRecordEnabled = true; // 自动记录开关 private boolean autoRecordEnabled = true; // 自动记录开关
@ -602,47 +602,45 @@ public class MainActivity extends Activity {
*/ */
private void saveDataToDatabase() { private void saveDataToDatabase() {
try { try {
// 检查是否启用自动记录 if (!autoRecordEnabled) { // 检查是否启用自动记录
if (!autoRecordEnabled) {
return; return;
} }
// 检查是否达到记录间隔
// 检查记录间隔 long currentTime = System.currentTimeMillis(); // 获取当前时间
long currentTime = System.currentTimeMillis(); if (currentTime - lastRecordTime < recordingInterval) { // 检查是否达到记录间隔
if (currentTime - lastRecordTime < recordingInterval) {
return; return;
} }
lastRecordTime = currentTime; lastRecordTime = currentTime; // 更新上次记录时间
// 检测是否触发报警条件 // 检测是否触发报警条件
boolean isTriggered = false; boolean isTriggered = false;
StringBuilder triggerConditions = new StringBuilder(); StringBuilder triggerConditions = new StringBuilder(); // 触发条件字符串
if (currentTemperature > thresholdTemp) { if (currentTemperature > thresholdTemp) { // 检查温度是否超标
isTriggered = true; isTriggered = true; // 设置触发标志
triggerConditions.append("温度超标(").append(currentTemperature).append("℃>").append(thresholdTemp).append("℃); "); triggerConditions.append("温度超标(").append(currentTemperature).append("℃>").append(thresholdTemp).append("℃); "); // 添加触发条件
} }
if (currentHumidity > thresholdHumi) { if (currentHumidity > thresholdHumi) { // 检查湿度是否超标
isTriggered = true; isTriggered = true;
triggerConditions.append("湿度超标(").append(currentHumidity).append("%>").append(thresholdHumi).append("%); "); triggerConditions.append("湿度超标(").append(currentHumidity).append("%>").append(thresholdHumi).append("%); "); // 添加触发条件
} }
if (currentDistance < thresholdDistance && currentDistance > 0) { if (currentDistance < thresholdDistance && currentDistance > 0) { // 检查距离是否过近
isTriggered = true; isTriggered = true; // 设置触发标志
triggerConditions.append("距离过近(").append(currentDistance).append("cm<").append(thresholdDistance).append("cm); "); triggerConditions.append("距离过近(").append(currentDistance).append("cm<").append(thresholdDistance).append("cm); "); // 添加触发条件
} }
if (currentLight > thresholdLight) { if (currentLight > thresholdLight) { // 检查光照是否过强
isTriggered = true; isTriggered = true; // 设置触发标志
triggerConditions.append("光照过强(").append(currentLight).append("%>").append(thresholdLight).append("%); "); triggerConditions.append("光照过强(").append(currentLight).append("%>").append(thresholdLight).append("%); "); // 添加触发条件
} }
// 处理触发条件字符串 // 处理触发条件字符串
String triggerText = triggerConditions.length() > 0 ? String triggerText = triggerConditions.length() > 0 ?
triggerConditions.toString().trim() : "正常"; triggerConditions.toString().trim() : "正常"; // 处理触发条件字符串
long id = databaseHelper.addSensorData( long id = databaseHelper.addSensorData( // 保存数据到数据库
currentTemperature, currentTemperature,
currentHumidity, currentHumidity,
currentLight, currentLight,
@ -658,7 +656,7 @@ public class MainActivity extends Activity {
// 可选自动清理旧数据保留最近30天的数据 // 可选自动清理旧数据保留最近30天的数据
if (databaseHelper.getRecordCount() > 1000) { if (databaseHelper.getRecordCount() > 1000) {
int deletedRows = databaseHelper.deleteOldData(30); int deletedRows = databaseHelper.deleteOldData(30); // 删除旧数据
if (deletedRows > 0) { if (deletedRows > 0) {
Log.d("MainActivity", "已删除 " + deletedRows + " 条旧数据"); Log.d("MainActivity", "已删除 " + deletedRows + " 条旧数据");
} }
@ -672,7 +670,7 @@ public class MainActivity extends Activity {
* *
*/ */
public void onHistoryButtonClicked(View view) { public void onHistoryButtonClicked(View view) {
Intent intent = new Intent(this, HistoryActivity.class); Intent intent = new Intent(this, HistoryActivity.class); // 跳转历史记录页面
startActivity(intent); startActivity(intent);
} }

@ -24,7 +24,7 @@ import java.util.List;
import com.test.Bluetooh_736_2.Database.DatabaseHelper; import com.test.Bluetooh_736_2.Database.DatabaseHelper;
import com.test.Bluetooh_736_2.Models.PresetScheme; import com.test.Bluetooh_736_2.Models.PresetScheme;
public class PresetManagerActivity extends Activity { public class PresetManagerActivity extends Activity { // 预设方案管理Activity
private ListView listPresets; private ListView listPresets;
private Button btnAddPreset; private Button btnAddPreset;
@ -37,47 +37,47 @@ public class PresetManagerActivity extends Activity {
private PresetScheme selectedScheme; private PresetScheme selectedScheme;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) { // 创建Activity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState); // 创建Activity
setContentView(R.layout.activity_preset_manager); setContentView(R.layout.activity_preset_manager); // 设置布局
// 初始化数据库 // 初始化数据库
dbHelper = new DatabaseHelper(this); dbHelper = new DatabaseHelper(this); // 初始化数据库
// 初始化UI组件 // 初始化UI组件
initViews(); initViews(); // 初始化UI组件
// 加载预设方案数据 // 加载预设方案数据
loadPresetSchemes(); loadPresetSchemes(); // 加载预设方案数据
// 设置事件监听器 // 设置事件监听器
setupListeners(); setupListeners(); // 设置事件监听器
} }
private void initViews() { private void initViews() { // 初始化UI组件
listPresets = findViewById(R.id.listPresets); listPresets = findViewById(R.id.listPresets); // 预设方案列表
btnAddPreset = findViewById(R.id.btnAddPreset); btnAddPreset = findViewById(R.id.btnAddPreset); // 添加预设方案按钮
btnCancel = findViewById(R.id.btnCancel); btnCancel = findViewById(R.id.btnCancel); // 取消按钮
btnConfirm = findViewById(R.id.btnConfirm); btnConfirm = findViewById(R.id.btnConfirm); // 确定按钮
// 初始化适配器 // 初始化适配器
presetSchemes = new ArrayList<>(); presetSchemes = new ArrayList<>(); // 预设方案列表
adapter = new PresetSchemeAdapter(); adapter = new PresetSchemeAdapter(); // 预设方案适配器
listPresets.setAdapter(adapter); listPresets.setAdapter(adapter); // 设置适配器
} }
private void loadPresetSchemes() { private void loadPresetSchemes() { // 加载预设方案数据
presetSchemes.clear(); presetSchemes.clear(); // 清空预设方案列表
presetSchemes.addAll(dbHelper.getAllPresetSchemes()); presetSchemes.addAll(dbHelper.getAllPresetSchemes()); // 添加预设方案
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged(); // 通知适配器数据已改变
} }
private void setupListeners() { private void setupListeners() { // 设置事件监听器
// 添加预设方案按钮 // 添加预设方案按钮
btnAddPreset.setOnClickListener(new View.OnClickListener() { btnAddPreset.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
showPresetEditor(null); showPresetEditor(null); // 显示预设方案编辑器
} }
}); });
@ -85,7 +85,7 @@ public class PresetManagerActivity extends Activity {
btnCancel.setOnClickListener(new View.OnClickListener() { btnCancel.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
finish(); finish(); // 结束当前Activity
} }
}); });
@ -94,11 +94,11 @@ public class PresetManagerActivity extends Activity {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (selectedScheme != null) { if (selectedScheme != null) {
applyPresetScheme(selectedScheme); applyPresetScheme(selectedScheme); // 应用预设方案
setResult(RESULT_OK); setResult(RESULT_OK); // 设置返回结果
finish(); finish(); // 结束当前Activity
} else { } else {
Toast.makeText(PresetManagerActivity.this, "请选择一个预设方案", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "请选择一个预设方案", Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
}); });
@ -107,78 +107,78 @@ public class PresetManagerActivity extends Activity {
/** /**
* *
*/ */
private void showPresetEditor(final PresetScheme scheme) { private void showPresetEditor(final PresetScheme scheme) { // 显示预设方案编辑器
LayoutInflater inflater = getLayoutInflater(); LayoutInflater inflater = getLayoutInflater(); // 获取LayoutInflater
View dialogView = inflater.inflate(R.layout.dialog_preset_editor, null); View dialogView = inflater.inflate(R.layout.dialog_preset_editor, null); // 获取对话框视图
// 获取对话框控件 // 获取对话框控件
TextView textDialogTitle = dialogView.findViewById(R.id.textDialogTitle); TextView textDialogTitle = dialogView.findViewById(R.id.textDialogTitle); // 对话框标题
EditText editPresetName = dialogView.findViewById(R.id.editPresetName); EditText editPresetName = dialogView.findViewById(R.id.editPresetName); // 预设方案名称
EditText editPresetDescription = dialogView.findViewById(R.id.editPresetDescription); EditText editPresetDescription = dialogView.findViewById(R.id.editPresetDescription); // 预设方案描述
EditText editTempThreshold = dialogView.findViewById(R.id.editTempThreshold); EditText editTempThreshold = dialogView.findViewById(R.id.editTempThreshold); // 温度阈值
EditText editHumiThreshold = dialogView.findViewById(R.id.editHumiThreshold); EditText editHumiThreshold = dialogView.findViewById(R.id.editHumiThreshold); // 湿度阈值
EditText editDistanceThreshold = dialogView.findViewById(R.id.editDistanceThreshold); EditText editDistanceThreshold = dialogView.findViewById(R.id.editDistanceThreshold); // 距离阈值
EditText editLightThreshold = dialogView.findViewById(R.id.editLightThreshold); EditText editLightThreshold = dialogView.findViewById(R.id.editLightThreshold); // 光照阈值
SeekBar seekRecordInterval = dialogView.findViewById(R.id.seekRecordInterval); SeekBar seekRecordInterval = dialogView.findViewById(R.id.seekRecordInterval); // 记录间隔
TextView textIntervalValue = dialogView.findViewById(R.id.textIntervalValue); TextView textIntervalValue = dialogView.findViewById(R.id.textIntervalValue); // 记录间隔值
CheckBox checkAutoRecord = dialogView.findViewById(R.id.checkAutoRecord); CheckBox checkAutoRecord = dialogView.findViewById(R.id.checkAutoRecord); // 自动记录
Button btnCancel = dialogView.findViewById(R.id.btnCancel); Button btnCancel = dialogView.findViewById(R.id.btnCancel); // 取消按钮
Button btnSave = dialogView.findViewById(R.id.btnSave); Button btnSave = dialogView.findViewById(R.id.btnSave); // 保存按钮
// 设置标题 // 设置标题
if (scheme == null) { if (scheme == null) {
textDialogTitle.setText("添加预设方案"); textDialogTitle.setText("添加预设方案"); // 设置标题
} else { } else {
textDialogTitle.setText("编辑预设方案"); textDialogTitle.setText("编辑预设方案"); // 设置标题
} }
// 填充数据 // 填充数据
if (scheme != null) { if (scheme != null) {
editPresetName.setText(scheme.getName()); editPresetName.setText(scheme.getName()); // 设置预设方案名称
editPresetDescription.setText(scheme.getDescription()); editPresetDescription.setText(scheme.getDescription()); // 设置预设方案描述
editTempThreshold.setText(String.valueOf(scheme.getTempThreshold())); editTempThreshold.setText(String.valueOf(scheme.getTempThreshold())); // 设置温度阈值
editHumiThreshold.setText(String.valueOf(scheme.getHumiThreshold())); editHumiThreshold.setText(String.valueOf(scheme.getHumiThreshold())); // 设置湿度阈值
editDistanceThreshold.setText(String.valueOf(scheme.getDistanceThreshold())); editDistanceThreshold.setText(String.valueOf(scheme.getDistanceThreshold())); // 设置距离阈值
editLightThreshold.setText(String.valueOf(scheme.getLightThreshold())); editLightThreshold.setText(String.valueOf(scheme.getLightThreshold())); // 设置光照阈值
int progress = (scheme.getRecordInterval() - 500) / 500; int progress = (scheme.getRecordInterval() - 500) / 500; // 设置记录间隔
seekRecordInterval.setProgress(progress); seekRecordInterval.setProgress(progress); // 设置记录间隔
checkAutoRecord.setChecked(scheme.isAutoRecord()); checkAutoRecord.setChecked(scheme.isAutoRecord()); // 设置自动记录
} else { } else {
// 默认值 // 默认值
editTempThreshold.setText("45"); editTempThreshold.setText("45"); // 设置温度阈值
editHumiThreshold.setText("35"); editHumiThreshold.setText("35"); // 设置湿度阈值
editDistanceThreshold.setText("10"); editDistanceThreshold.setText("10"); // 设置距离阈值
editLightThreshold.setText("70"); editLightThreshold.setText("70"); // 设置光照阈值
seekRecordInterval.setProgress(1); seekRecordInterval.setProgress(1); // 设置记录间隔
checkAutoRecord.setChecked(true); checkAutoRecord.setChecked(true); // 设置自动记录
} }
// 设置SeekBar监听器 // 设置SeekBar监听器
seekRecordInterval.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { seekRecordInterval.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // 设置记录间隔
int interval = (progress * 500) + 500; int interval = (progress * 500) + 500; // 设置记录间隔
if (interval < 1000) { if (interval < 1000) { // 如果记录间隔小于1000
textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); // 设置记录间隔值
} else { } else {
textIntervalValue.setText(String.format("%d 秒", interval / 1000)); textIntervalValue.setText(String.format("%d 秒", interval / 1000)); // 设置记录间隔值
} }
} }
@Override @Override
public void onStartTrackingTouch(SeekBar seekBar) {} public void onStartTrackingTouch(SeekBar seekBar) {} // 开始拖动
@Override @Override
public void onStopTrackingTouch(SeekBar seekBar) {} public void onStopTrackingTouch(SeekBar seekBar) {} // 停止拖动
}); });
// 初始化间隔显示 // 初始化间隔显示
int interval = (seekRecordInterval.getProgress() * 500) + 500; int interval = (seekRecordInterval.getProgress() * 500) + 500; // 设置记录间隔
if (interval < 1000) { if (interval < 1000) { // 如果记录间隔小于1000
textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); // 设置记录间隔值
} else { } else {
textIntervalValue.setText(String.format("%d 秒", interval / 1000)); textIntervalValue.setText(String.format("%d 秒", interval / 1000)); // 设置记录间隔值
} }
// 创建对话框 // 创建对话框
@ -191,7 +191,7 @@ public class PresetManagerActivity extends Activity {
btnCancel.setOnClickListener(new View.OnClickListener() { btnCancel.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
dialog.dismiss(); dialog.dismiss(); // 关闭对话框
} }
}); });
@ -199,39 +199,39 @@ public class PresetManagerActivity extends Activity {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
try { try {
String name = editPresetName.getText().toString().trim(); String name = editPresetName.getText().toString().trim(); // 获取预设方案名称
String description = editPresetDescription.getText().toString().trim(); String description = editPresetDescription.getText().toString().trim(); // 获取预设方案描述
int tempThreshold = Integer.parseInt(editTempThreshold.getText().toString()); int tempThreshold = Integer.parseInt(editTempThreshold.getText().toString()); // 获取温度阈值
int humiThreshold = Integer.parseInt(editHumiThreshold.getText().toString()); int humiThreshold = Integer.parseInt(editHumiThreshold.getText().toString()); // 获取湿度阈值
int distanceThreshold = Integer.parseInt(editDistanceThreshold.getText().toString()); int distanceThreshold = Integer.parseInt(editDistanceThreshold.getText().toString()); // 获取距离阈值
int lightThreshold = Integer.parseInt(editLightThreshold.getText().toString()); int lightThreshold = Integer.parseInt(editLightThreshold.getText().toString()); // 获取光照阈值
int recordInterval = (seekRecordInterval.getProgress() * 500) + 500; int recordInterval = (seekRecordInterval.getProgress() * 500) + 500; // 获取记录间隔
boolean autoRecord = checkAutoRecord.isChecked(); boolean autoRecord = checkAutoRecord.isChecked(); // 获取自动记录
// 验证输入 // 验证输入
if (name.isEmpty()) { if (name.isEmpty()) {
Toast.makeText(PresetManagerActivity.this, "请输入方案名称", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "请输入方案名称", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return; // 返回
} }
if (tempThreshold < 0 || tempThreshold > 100) { if (tempThreshold < 0 || tempThreshold > 100) {
Toast.makeText(PresetManagerActivity.this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return; // 返回
} }
if (humiThreshold < 0 || humiThreshold > 100) { if (humiThreshold < 0 || humiThreshold > 100) {
Toast.makeText(PresetManagerActivity.this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return; // 返回
} }
if (distanceThreshold < 0 || distanceThreshold > 500) { if (distanceThreshold < 0 || distanceThreshold > 500) {
Toast.makeText(PresetManagerActivity.this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return; // 返回
} }
if (lightThreshold < 0 || lightThreshold > 100) { if (lightThreshold < 0 || lightThreshold > 100) {
Toast.makeText(PresetManagerActivity.this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return; // 返回
} }
// 保存方案 // 保存方案
@ -240,53 +240,53 @@ public class PresetManagerActivity extends Activity {
long result = dbHelper.addPresetScheme(name, description, tempThreshold, humiThreshold, long result = dbHelper.addPresetScheme(name, description, tempThreshold, humiThreshold,
distanceThreshold, lightThreshold, recordInterval, autoRecord); distanceThreshold, lightThreshold, recordInterval, autoRecord);
if (result > 0) { if (result > 0) {
Toast.makeText(PresetManagerActivity.this, "方案添加成功", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "方案添加成功", Toast.LENGTH_SHORT).show(); // 显示Toast
loadPresetSchemes(); loadPresetSchemes(); // 加载预设方案
dialog.dismiss(); dialog.dismiss(); // 关闭对话框
} else { } else {
Toast.makeText(PresetManagerActivity.this, "方案添加失败", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "方案添加失败", Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} else { } else {
// 更新现有方案 // 更新现有方案
int result = dbHelper.updatePresetScheme(scheme.getId(), name, description, tempThreshold, humiThreshold, int result = dbHelper.updatePresetScheme(scheme.getId(), name, description, tempThreshold, humiThreshold,
distanceThreshold, lightThreshold, recordInterval, autoRecord); distanceThreshold, lightThreshold, recordInterval, autoRecord);
if (result > 0) { if (result > 0) {
Toast.makeText(PresetManagerActivity.this, "方案更新成功", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "方案更新成功", Toast.LENGTH_SHORT).show(); // 显示Toast
loadPresetSchemes(); loadPresetSchemes(); // 加载预设方案
dialog.dismiss(); dialog.dismiss(); // 关闭对话框
} else { } else {
Toast.makeText(PresetManagerActivity.this, "方案更新失败", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "方案更新失败", Toast.LENGTH_SHORT).show();
} }
} }
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
Toast.makeText(PresetManagerActivity.this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); // 显示Toast
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(PresetManagerActivity.this, "保存失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "保存失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
}); });
dialog.show(); dialog.show(); // 显示对话框
} }
/** /**
* *
*/ */
private void applyPresetScheme(PresetScheme scheme) { private void applyPresetScheme(PresetScheme scheme) {
SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); // 获取SharedPreferences
SharedPreferences.Editor editor = prefs.edit(); SharedPreferences.Editor editor = prefs.edit(); // 获取Editor
editor.putInt("threshold_temp", scheme.getTempThreshold()); editor.putInt("threshold_temp", scheme.getTempThreshold()); // 设置温度阈值
editor.putInt("threshold_humi", scheme.getHumiThreshold()); editor.putInt("threshold_humi", scheme.getHumiThreshold()); // 设置湿度阈值
editor.putInt("threshold_distance", scheme.getDistanceThreshold()); editor.putInt("threshold_distance", scheme.getDistanceThreshold()); // 设置距离阈值
editor.putInt("threshold_light", scheme.getLightThreshold()); editor.putInt("threshold_light", scheme.getLightThreshold()); // 设置光照阈值
editor.putInt("recording_interval", scheme.getRecordInterval()); editor.putInt("recording_interval", scheme.getRecordInterval()); // 设置记录间隔
editor.putBoolean("auto_record", scheme.isAutoRecord()); editor.putBoolean("auto_record", scheme.isAutoRecord()); // 设置自动记录
editor.apply(); editor.apply(); // 应用
Toast.makeText(this, "已应用预设方案: " + scheme.getName(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "已应用预设方案: " + scheme.getName(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
/** /**
@ -296,23 +296,23 @@ public class PresetManagerActivity extends Activity {
@Override @Override
public int getCount() { public int getCount() {
return presetSchemes.size(); return presetSchemes.size(); // 返回预设方案数量
} }
@Override @Override
public PresetScheme getItem(int position) { public PresetScheme getItem(int position) {
return presetSchemes.get(position); return presetSchemes.get(position); // 返回预设方案
} }
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return position; return position; // 返回位置
} }
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) { public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) { if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.item_preset_scheme, parent, false); convertView = getLayoutInflater().inflate(R.layout.item_preset_scheme, parent, false); // 获取布局
} }
PresetScheme scheme = getItem(position); PresetScheme scheme = getItem(position);
@ -327,30 +327,30 @@ public class PresetManagerActivity extends Activity {
Button btnDeletePreset = convertView.findViewById(R.id.btnDeletePreset); Button btnDeletePreset = convertView.findViewById(R.id.btnDeletePreset);
// 设置数据 // 设置数据
textPresetName.setText(scheme.getName()); textPresetName.setText(scheme.getName()); // 设置预设方案名称
textPresetDescription.setText(scheme.getDescription()); textPresetDescription.setText(scheme.getDescription()); // 设置预设方案描述
textPresetSummary.setText(scheme.getSummary()); textPresetSummary.setText(scheme.getSummary()); // 设置预设方案摘要
// 显示默认标签 // 显示默认标签
if (scheme.isDefault()) { if (scheme.isDefault()) {
textDefaultTag.setVisibility(View.VISIBLE); textDefaultTag.setVisibility(View.VISIBLE); // 设置默认标签可见
} else { } else {
textDefaultTag.setVisibility(View.GONE); textDefaultTag.setVisibility(View.GONE); // 设置默认标签不可见
} }
// 设置按钮监听器 // 设置按钮监听器
btnSelectPreset.setOnClickListener(new View.OnClickListener() { btnSelectPreset.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
selectedScheme = scheme; selectedScheme = scheme; // 设置选中方案
Toast.makeText(PresetManagerActivity.this, "已选择: " + scheme.getName(), Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "已选择: " + scheme.getName(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
}); });
btnEditPreset.setOnClickListener(new View.OnClickListener() { btnEditPreset.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
showPresetEditor(scheme); showPresetEditor(scheme); // 显示预设方案编辑器
} }
}); });
@ -358,20 +358,20 @@ public class PresetManagerActivity extends Activity {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (scheme.isDefault()) { if (scheme.isDefault()) {
Toast.makeText(PresetManagerActivity.this, "不能删除默认方案", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "不能删除默认方案", Toast.LENGTH_SHORT).show(); // 显示Toast
} else { } else {
showDeleteConfirmDialog(scheme); showDeleteConfirmDialog(scheme); // 显示删除确认对话框
} }
} }
}); });
// 禁用删除默认方案 // 禁用删除默认方案
if (scheme.isDefault()) { if (scheme.isDefault()) {
btnDeletePreset.setEnabled(false); btnDeletePreset.setEnabled(false); // 禁用删除按钮
btnDeletePreset.setAlpha(0.5f); btnDeletePreset.setAlpha(0.5f); // 设置删除按钮透明度
} else { } else {
btnDeletePreset.setEnabled(true); btnDeletePreset.setEnabled(true); // 启用删除按钮
btnDeletePreset.setAlpha(1.0f); btnDeletePreset.setAlpha(1.0f); // 设置删除按钮透明度
} }
return convertView; return convertView;
@ -390,10 +390,10 @@ public class PresetManagerActivity extends Activity {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
int result = dbHelper.deletePresetScheme(scheme.getId()); int result = dbHelper.deletePresetScheme(scheme.getId());
if (result > 0) { if (result > 0) {
Toast.makeText(PresetManagerActivity.this, "方案删除成功", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "方案删除成功", Toast.LENGTH_SHORT).show(); // 显示Toast
loadPresetSchemes(); loadPresetSchemes(); // 加载预设方案
} else { } else {
Toast.makeText(PresetManagerActivity.this, "方案删除失败", Toast.LENGTH_SHORT).show(); Toast.makeText(PresetManagerActivity.this, "方案删除失败", Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
}) })

@ -15,60 +15,60 @@ import android.widget.Toast;
public class SettingsActivity extends Activity { public class SettingsActivity extends Activity {
// UI组件 // UI组件
private CheckBox checkAutoRecord; private CheckBox checkAutoRecord; // 自动记录
private SeekBar seekRecordInterval; private SeekBar seekRecordInterval; // 记录间隔
private TextView textIntervalValue; private TextView textIntervalValue; // 记录间隔值
private EditText editThresholdTemp; private EditText editThresholdTemp; // 温度阈值
private EditText editThresholdHumi; private EditText editThresholdHumi; // 湿度阈值
private EditText editThresholdDistance; private EditText editThresholdDistance; // 距离阈值
private EditText editThresholdLight; private EditText editThresholdLight; // 光照阈值
private Button buttonSave; private Button buttonSave; // 保存
private Button buttonCancel; private Button buttonCancel; // 取消
private Button buttonReset; private Button buttonReset; // 重置
private Button buttonPresetManager; private Button buttonPresetManager; // 预设方案管理
// 设置值 // 设置值
private boolean autoRecordEnabled = true; private boolean autoRecordEnabled = true; // 自动记录
private int recordingInterval = 1000; private int recordingInterval = 1000; // 记录间隔
private int thresholdTemp = 45; private int thresholdTemp = 45; // 温度阈值
private int thresholdHumi = 35; private int thresholdHumi = 35; // 湿度阈值
private int thresholdDistance = 10; private int thresholdDistance = 10; // 距离阈值
private int thresholdLight = 70; private int thresholdLight = 70; // 光照阈值
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) { // 创建Activity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState); // 创建Activity
setContentView(R.layout.activity_settings); setContentView(R.layout.activity_settings); // 设置布局
// 初始化UI组件 // 初始化UI组件
initViews(); initViews(); // 初始化UI组件
// 加载当前设置 // 加载当前设置
loadCurrentSettings(); loadCurrentSettings(); // 加载当前设置
// 设置UI值 // 设置UI值
updateUI(); updateUI(); // 设置UI值
// 设置事件监听器 // 设置事件监听器
setupListeners(); setupListeners(); // 设置事件监听器
} }
private void initViews() { private void initViews() { // 初始化UI组件
checkAutoRecord = findViewById(R.id.checkAutoRecord); checkAutoRecord = findViewById(R.id.checkAutoRecord); // 自动记录
seekRecordInterval = findViewById(R.id.seekRecordInterval); seekRecordInterval = findViewById(R.id.seekRecordInterval); // 记录间隔
textIntervalValue = findViewById(R.id.textIntervalValue); textIntervalValue = findViewById(R.id.textIntervalValue); // 记录间隔值
editThresholdTemp = findViewById(R.id.editThresholdTemp); editThresholdTemp = findViewById(R.id.editThresholdTemp); // 温度阈值
editThresholdHumi = findViewById(R.id.editThresholdHumi); editThresholdHumi = findViewById(R.id.editThresholdHumi); // 湿度阈值
editThresholdDistance = findViewById(R.id.editThresholdDistance); editThresholdDistance = findViewById(R.id.editThresholdDistance); // 距离阈值
editThresholdLight = findViewById(R.id.editThresholdLight); editThresholdLight = findViewById(R.id.editThresholdLight); // 光照阈值
buttonSave = findViewById(R.id.buttonSave); buttonSave = findViewById(R.id.buttonSave); // 保存
buttonCancel = findViewById(R.id.buttonCancel); buttonCancel = findViewById(R.id.buttonCancel); // 取消
buttonReset = findViewById(R.id.buttonReset); buttonReset = findViewById(R.id.buttonReset); // 重置
buttonPresetManager = findViewById(R.id.buttonPresetManager); buttonPresetManager = findViewById(R.id.buttonPresetManager); // 预设方案管理
} }
private void loadCurrentSettings() { private void loadCurrentSettings() { // 加载当前设置
SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); // 获取SharedPreferences
autoRecordEnabled = prefs.getBoolean("auto_record", true); autoRecordEnabled = prefs.getBoolean("auto_record", true);
recordingInterval = prefs.getInt("recording_interval", 1000); recordingInterval = prefs.getInt("recording_interval", 1000);
thresholdTemp = prefs.getInt("threshold_temp", 45); thresholdTemp = prefs.getInt("threshold_temp", 45);
@ -77,41 +77,41 @@ public class SettingsActivity extends Activity {
thresholdLight = prefs.getInt("threshold_light", 70); thresholdLight = prefs.getInt("threshold_light", 70);
} }
private void updateUI() { private void updateUI() { // 设置UI值
checkAutoRecord.setChecked(autoRecordEnabled); checkAutoRecord.setChecked(autoRecordEnabled); // 设置自动记录
// 设置记录间隔 (0.5秒到30秒步长0.5秒) // 设置记录间隔 (0.5秒到30秒步长0.5秒)
int progress = (recordingInterval - 500) / 500; // 转换为SeekBar进度值 int progress = (recordingInterval - 500) / 500; // 转换为SeekBar进度值
seekRecordInterval.setProgress(progress); seekRecordInterval.setProgress(progress); // 设置记录间隔
updateIntervalText(); updateIntervalText(); // 更新记录间隔值
editThresholdTemp.setText(String.valueOf(thresholdTemp)); editThresholdTemp.setText(String.valueOf(thresholdTemp)); // 设置温度阈值
editThresholdHumi.setText(String.valueOf(thresholdHumi)); editThresholdHumi.setText(String.valueOf(thresholdHumi)); // 设置湿度阈值
editThresholdDistance.setText(String.valueOf(thresholdDistance)); editThresholdDistance.setText(String.valueOf(thresholdDistance)); // 设置距离阈值
editThresholdLight.setText(String.valueOf(thresholdLight)); editThresholdLight.setText(String.valueOf(thresholdLight)); // 设置光照阈值
} }
private void setupListeners() { private void setupListeners() { // 设置事件监听器
// 记录间隔滑块 // 记录间隔滑块
seekRecordInterval.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { seekRecordInterval.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
recordingInterval = (progress * 500) + 500; // 0.5秒到30秒 recordingInterval = (progress * 500) + 500; // 0.5秒到30秒
updateIntervalText(); updateIntervalText(); // 更新记录间隔值
} }
@Override @Override
public void onStartTrackingTouch(SeekBar seekBar) {} public void onStartTrackingTouch(SeekBar seekBar) {} // 开始拖动
@Override @Override
public void onStopTrackingTouch(SeekBar seekBar) {} public void onStopTrackingTouch(SeekBar seekBar) {} // 停止拖动
}); });
// 保存按钮 // 保存按钮
buttonSave.setOnClickListener(new View.OnClickListener() { buttonSave.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
saveSettings(); saveSettings(); // 保存设置
} }
}); });
@ -119,7 +119,7 @@ public class SettingsActivity extends Activity {
buttonCancel.setOnClickListener(new View.OnClickListener() { buttonCancel.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
finish(); finish(); // 结束当前Activity
} }
}); });
@ -127,7 +127,7 @@ public class SettingsActivity extends Activity {
buttonReset.setOnClickListener(new View.OnClickListener() { buttonReset.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
resetToDefaults(); resetToDefaults(); // 重置为默认设置
} }
}); });
@ -135,99 +135,99 @@ public class SettingsActivity extends Activity {
buttonPresetManager.setOnClickListener(new View.OnClickListener() { buttonPresetManager.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent intent = new Intent(SettingsActivity.this, PresetManagerActivity.class); Intent intent = new Intent(SettingsActivity.this, PresetManagerActivity.class); // 创建Intent
startActivityForResult(intent, 100); startActivityForResult(intent, 100); // 启动Activity
} }
}); });
} }
private void updateIntervalText() { private void updateIntervalText() { // 更新记录间隔值
if (recordingInterval < 1000) { if (recordingInterval < 1000) { // 如果记录间隔小于1000
textIntervalValue.setText(String.format("%.1f 秒", recordingInterval / 1000.0)); textIntervalValue.setText(String.format("%.1f 秒", recordingInterval / 1000.0)); // 设置记录间隔值
} else { } else {
textIntervalValue.setText(String.format("%d 秒", recordingInterval / 1000)); textIntervalValue.setText(String.format("%d 秒", recordingInterval / 1000)); // 设置记录间隔值
} }
} }
private void saveSettings() { private void saveSettings() { // 保存设置
try { try {
// 获取用户输入 // 获取用户输入
autoRecordEnabled = checkAutoRecord.isChecked(); autoRecordEnabled = checkAutoRecord.isChecked();
thresholdTemp = Integer.parseInt(editThresholdTemp.getText().toString()); thresholdTemp = Integer.parseInt(editThresholdTemp.getText().toString()); // 设置温度阈值
thresholdHumi = Integer.parseInt(editThresholdHumi.getText().toString()); thresholdHumi = Integer.parseInt(editThresholdHumi.getText().toString()); // 设置湿度阈值
thresholdDistance = Integer.parseInt(editThresholdDistance.getText().toString()); thresholdDistance = Integer.parseInt(editThresholdDistance.getText().toString()); // 设置距离阈值
thresholdLight = Integer.parseInt(editThresholdLight.getText().toString()); thresholdLight = Integer.parseInt(editThresholdLight.getText().toString()); // 设置光照阈值
// 验证输入值 // 验证输入值
if (thresholdTemp < 0 || thresholdTemp > 100) { if (thresholdTemp < 0 || thresholdTemp > 100) {
Toast.makeText(this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return;
} }
if (thresholdHumi < 0 || thresholdHumi > 100) { if (thresholdHumi < 0 || thresholdHumi > 100) {
Toast.makeText(this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return;
} }
if (thresholdDistance < 0 || thresholdDistance > 500) { if (thresholdDistance < 0 || thresholdDistance > 500) {
Toast.makeText(this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return;
} }
if (thresholdLight < 0 || thresholdLight > 100) { if (thresholdLight < 0 || thresholdLight > 100) {
Toast.makeText(this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast
return; return;
} }
// 保存到SharedPreferences // 保存到SharedPreferences
SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); // 获取SharedPreferences
SharedPreferences.Editor editor = prefs.edit(); SharedPreferences.Editor editor = prefs.edit(); // 获取Editor
editor.putBoolean("auto_record", autoRecordEnabled); editor.putBoolean("auto_record", autoRecordEnabled); // 设置自动记录
editor.putInt("recording_interval", recordingInterval); editor.putInt("recording_interval", recordingInterval); // 设置记录间隔
editor.putInt("threshold_temp", thresholdTemp); editor.putInt("threshold_temp", thresholdTemp); // 设置温度阈值
editor.putInt("threshold_humi", thresholdHumi); editor.putInt("threshold_humi", thresholdHumi); // 设置湿度阈值
editor.putInt("threshold_distance", thresholdDistance); editor.putInt("threshold_distance", thresholdDistance); // 设置距离阈值
editor.putInt("threshold_light", thresholdLight); editor.putInt("threshold_light", thresholdLight); // 设置光照阈值
editor.apply(); editor.apply(); // 应用
// 返回结果 // 返回结果
setResult(RESULT_OK); setResult(RESULT_OK); // 设置返回结果
Toast.makeText(this, "设置已保存", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "设置已保存", Toast.LENGTH_SHORT).show(); // 显示Toast
finish(); finish(); // 结束当前Activity
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
Toast.makeText(this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); // 显示Toast
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(this, "保存设置失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); Toast.makeText(this, "保存设置失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
private void resetToDefaults() { private void resetToDefaults() { // 重置为默认设置
autoRecordEnabled = true; autoRecordEnabled = true; // 设置自动记录
recordingInterval = 1000; recordingInterval = 1000; // 设置记录间隔
thresholdTemp = 45; thresholdTemp = 45; // 设置温度阈值
thresholdHumi = 35; thresholdHumi = 35; // 设置湿度阈值
thresholdDistance = 10; thresholdDistance = 10; // 设置距离阈值
thresholdLight = 70; thresholdLight = 70; // 设置光照阈值
updateUI(); updateUI(); // 更新UI
Toast.makeText(this, "已重置为默认设置", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "已重置为默认设置", Toast.LENGTH_SHORT).show(); // 显示Toast
} }
/** /**
* *
*/ */
public void onBackButtonClicked(View view) { public void onBackButtonClicked(View view) { // 返回按钮点击事件
finish(); finish(); // 结束当前Activity
} }
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); // 处理Activity返回结果
if (requestCode == 100 && resultCode == RESULT_OK) { if (requestCode == 100 && resultCode == RESULT_OK) { // 如果请求码为100且结果码为RESULT_OK
// 从预设方案管理器返回,重新加载设置 // 从预设方案管理器返回,重新加载设置
loadCurrentSettings(); loadCurrentSettings(); // 重新加载设置
updateUI(); updateUI(); // 更新UI
Toast.makeText(this, "预设方案已应用,请保存设置", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "预设方案已应用,请保存设置", Toast.LENGTH_SHORT).show(); // 显示Toast
} }
} }
} }

@ -19,46 +19,46 @@ import com.test.Bluetooh_736_2.Models.PresetScheme;
public class DatabaseHelper extends SQLiteOpenHelper { public class DatabaseHelper extends SQLiteOpenHelper {
// 数据库基本信息 // 数据库基本信息
private static final String DATABASE_NAME = "BattlefieldDetection.db"; private static final String DATABASE_NAME = "BattlefieldDetection.db"; // 数据库名称
private static final int DATABASE_VERSION = 3; private static final int DATABASE_VERSION = 3;
// 数据表名 // 数据表名
private static final String TABLE_SENSOR_DATA = "sensor_data"; private static final String TABLE_SENSOR_DATA = "sensor_data"; // 传感器数据表名
private static final String TABLE_PRESET_SCHEMES = "preset_schemes"; private static final String TABLE_PRESET_SCHEMES = "preset_schemes"; // 预设方案表名
// 传感器数据表字段 // 传感器数据表字段
private static final String COLUMN_ID = "id"; private static final String COLUMN_ID = "id"; // ID
private static final String COLUMN_TIMESTAMP = "timestamp"; private static final String COLUMN_TIMESTAMP = "timestamp"; // 时间戳
private static final String COLUMN_TEMPERATURE = "temperature"; private static final String COLUMN_TEMPERATURE = "temperature"; // 温度
private static final String COLUMN_HUMIDITY = "humidity"; private static final String COLUMN_HUMIDITY = "humidity"; // 湿度
private static final String COLUMN_LIGHT = "light"; private static final String COLUMN_LIGHT = "light"; // 光照
private static final String COLUMN_DISTANCE = "distance"; private static final String COLUMN_DISTANCE = "distance"; // 距离
private static final String COLUMN_TIME_MINUTES = "time_minutes"; private static final String COLUMN_TIME_MINUTES = "time_minutes"; // 时间(分钟)
private static final String COLUMN_MODE = "mode"; private static final String COLUMN_MODE = "mode"; // 模式
private static final String COLUMN_IS_TRIGGERED = "is_triggered"; private static final String COLUMN_IS_TRIGGERED = "is_triggered"; // 触发状态
private static final String COLUMN_TRIGGER_CONDITIONS = "trigger_conditions"; private static final String COLUMN_TRIGGER_CONDITIONS = "trigger_conditions"; // 触发条件
// 预设方案表字段 // 预设方案表字段
private static final String COLUMN_PRESET_ID = "preset_id"; private static final String COLUMN_PRESET_ID = "preset_id"; // ID
private static final String COLUMN_PRESET_NAME = "preset_name"; private static final String COLUMN_PRESET_NAME = "preset_name"; // 预设方案名称
private static final String COLUMN_PRESET_DESCRIPTION = "preset_description"; private static final String COLUMN_PRESET_DESCRIPTION = "preset_description"; // 预设方案描述
private static final String COLUMN_PRESET_TEMP_THRESHOLD = "temp_threshold"; private static final String COLUMN_PRESET_TEMP_THRESHOLD = "temp_threshold"; // 温度阈值
private static final String COLUMN_PRESET_HUMI_THRESHOLD = "humi_threshold"; private static final String COLUMN_PRESET_HUMI_THRESHOLD = "humi_threshold"; // 湿度阈值
private static final String COLUMN_PRESET_DISTANCE_THRESHOLD = "distance_threshold"; private static final String COLUMN_PRESET_DISTANCE_THRESHOLD = "distance_threshold"; // 距离阈值
private static final String COLUMN_PRESET_LIGHT_THRESHOLD = "light_threshold"; private static final String COLUMN_PRESET_LIGHT_THRESHOLD = "light_threshold"; // 光照阈值
private static final String COLUMN_PRESET_RECORD_INTERVAL = "record_interval"; private static final String COLUMN_PRESET_RECORD_INTERVAL = "record_interval"; // 记录间隔
private static final String COLUMN_PRESET_AUTO_RECORD = "auto_record"; private static final String COLUMN_PRESET_AUTO_RECORD = "auto_record"; // 自动记录
private static final String COLUMN_PRESET_CREATED_TIME = "created_time"; private static final String COLUMN_PRESET_CREATED_TIME = "created_time"; // 创建时间
private static final String COLUMN_PRESET_IS_DEFAULT = "is_default"; private static final String COLUMN_PRESET_IS_DEFAULT = "is_default"; // 是否默认
public DatabaseHelper(Context context) { public DatabaseHelper(Context context) { // 构造函数
super(context, DATABASE_NAME, null, DATABASE_VERSION); super(context, DATABASE_NAME, null, DATABASE_VERSION);
} }
@Override @Override
public void onCreate(SQLiteDatabase db) { public void onCreate(SQLiteDatabase db) { // 创建数据库
// 创建传感器数据表 // 创建传感器数据表
String CREATE_SENSOR_TABLE = "CREATE TABLE " + TABLE_SENSOR_DATA + "(" String CREATE_SENSOR_TABLE = "CREATE TABLE " + TABLE_SENSOR_DATA + "(" // 创建传感器数据表
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COLUMN_TIMESTAMP + " TEXT NOT NULL," + COLUMN_TIMESTAMP + " TEXT NOT NULL,"
+ COLUMN_TEMPERATURE + " INTEGER," + COLUMN_TEMPERATURE + " INTEGER,"
@ -73,7 +73,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
db.execSQL(CREATE_SENSOR_TABLE); db.execSQL(CREATE_SENSOR_TABLE);
// 创建预设方案表 // 创建预设方案表
String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" // 创建预设方案表
+ COLUMN_PRESET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_PRESET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COLUMN_PRESET_NAME + " TEXT NOT NULL," + COLUMN_PRESET_NAME + " TEXT NOT NULL,"
+ COLUMN_PRESET_DESCRIPTION + " TEXT," + COLUMN_PRESET_DESCRIPTION + " TEXT,"
@ -93,40 +93,40 @@ public class DatabaseHelper extends SQLiteOpenHelper {
} }
@Override @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 升级数据库
// 升级数据库时处理版本兼容 // 升级数据库时处理版本兼容
if (oldVersion < 2) { if (oldVersion < 2) {
// 版本1 -> 版本2添加触发状态和触发条件字段 // 版本1 -> 版本2添加触发状态和触发条件字段
try { try {
db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_IS_TRIGGERED + " INTEGER DEFAULT 0"); db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_IS_TRIGGERED + " INTEGER DEFAULT 0"); // 添加触发状态字段
db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_TRIGGER_CONDITIONS + " TEXT"); db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_TRIGGER_CONDITIONS + " TEXT"); // 添加触发条件字段
Log.d("DatabaseHelper", "数据库升级成功:添加触发状态字段"); Log.d("DatabaseHelper", "数据库升级成功:添加触发状态字段");
} catch (Exception e) { } catch (Exception e) {
Log.e("DatabaseHelper", "数据库升级失败,重新创建表", e); Log.e("DatabaseHelper", "数据库升级失败,重新创建表", e);
// 如果升级失败,删除旧表并创建新表 // 如果升级失败,删除旧表并创建新表
db.execSQL("DROP TABLE IF EXISTS " + TABLE_SENSOR_DATA); db.execSQL("DROP TABLE IF EXISTS " + TABLE_SENSOR_DATA); // 删除旧表
onCreate(db); onCreate(db); // 创建新表
} }
} }
if (oldVersion < 3) { if (oldVersion < 3) {
// 版本2 -> 版本3添加预设方案表 // 版本2 -> 版本3添加预设方案表
try { try {
String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" // 创建预设方案表
+ COLUMN_PRESET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_PRESET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," // 预设方案ID
+ COLUMN_PRESET_NAME + " TEXT NOT NULL," + COLUMN_PRESET_NAME + " TEXT NOT NULL," // 预设方案名称
+ COLUMN_PRESET_DESCRIPTION + " TEXT," + COLUMN_PRESET_DESCRIPTION + " TEXT," // 预设方案描述
+ COLUMN_PRESET_TEMP_THRESHOLD + " INTEGER DEFAULT 45," + COLUMN_PRESET_TEMP_THRESHOLD + " INTEGER DEFAULT 45," // 温度阈值
+ COLUMN_PRESET_HUMI_THRESHOLD + " INTEGER DEFAULT 35," + COLUMN_PRESET_HUMI_THRESHOLD + " INTEGER DEFAULT 35," // 湿度阈值
+ COLUMN_PRESET_DISTANCE_THRESHOLD + " INTEGER DEFAULT 10," + COLUMN_PRESET_DISTANCE_THRESHOLD + " INTEGER DEFAULT 10," // 距离阈值
+ COLUMN_PRESET_LIGHT_THRESHOLD + " INTEGER DEFAULT 70," + COLUMN_PRESET_LIGHT_THRESHOLD + " INTEGER DEFAULT 70," // 光照阈值
+ COLUMN_PRESET_RECORD_INTERVAL + " INTEGER DEFAULT 1000," + COLUMN_PRESET_RECORD_INTERVAL + " INTEGER DEFAULT 1000," // 记录间隔
+ COLUMN_PRESET_AUTO_RECORD + " INTEGER DEFAULT 1," + COLUMN_PRESET_AUTO_RECORD + " INTEGER DEFAULT 1," // 自动记录
+ COLUMN_PRESET_CREATED_TIME + " TEXT NOT NULL," + COLUMN_PRESET_CREATED_TIME + " TEXT NOT NULL," // 创建时间
+ COLUMN_PRESET_IS_DEFAULT + " INTEGER DEFAULT 0" + COLUMN_PRESET_IS_DEFAULT + " INTEGER DEFAULT 0" // 是否默认
+ ")"; + ")";
db.execSQL(CREATE_PRESET_TABLE); db.execSQL(CREATE_PRESET_TABLE); // 执行创建预设方案表的SQL语句
insertDefaultPresets(db); insertDefaultPresets(db); // 插入默认预设方案
Log.d("DatabaseHelper", "数据库升级成功:添加预设方案表"); Log.d("DatabaseHelper", "数据库升级成功:添加预设方案表");
} catch (Exception e) { } catch (Exception e) {
Log.e("DatabaseHelper", "添加预设方案表失败", e); Log.e("DatabaseHelper", "添加预设方案表失败", e);
@ -138,277 +138,277 @@ public class DatabaseHelper extends SQLiteOpenHelper {
* *
*/ */
public long addSensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode, boolean isTriggered, String triggerConditions) { public long addSensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode, boolean isTriggered, String triggerConditions) {
SQLiteDatabase db = this.getWritableDatabase(); SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库
ContentValues values = new ContentValues(); ContentValues values = new ContentValues(); // 创建ContentValues对象
values.put(COLUMN_TIMESTAMP, getCurrentTimestamp()); values.put(COLUMN_TIMESTAMP, getCurrentTimestamp()); // 设置时间戳
values.put(COLUMN_TEMPERATURE, temperature); values.put(COLUMN_TEMPERATURE, temperature); // 设置温度
values.put(COLUMN_HUMIDITY, humidity); values.put(COLUMN_HUMIDITY, humidity); // 设置湿度
values.put(COLUMN_LIGHT, light); values.put(COLUMN_LIGHT, light); // 设置光照
values.put(COLUMN_DISTANCE, distance); values.put(COLUMN_DISTANCE, distance); // 设置距离
values.put(COLUMN_TIME_MINUTES, timeMinutes); values.put(COLUMN_TIME_MINUTES, timeMinutes); // 设置时间(分钟)
values.put(COLUMN_MODE, mode); values.put(COLUMN_MODE, mode); // 设置模式
values.put(COLUMN_IS_TRIGGERED, isTriggered ? 1 : 0); values.put(COLUMN_IS_TRIGGERED, isTriggered ? 1 : 0); // 设置触发状态
values.put(COLUMN_TRIGGER_CONDITIONS, triggerConditions); values.put(COLUMN_TRIGGER_CONDITIONS, triggerConditions); // 设置触发条件
long id = db.insert(TABLE_SENSOR_DATA, null, values); long id = db.insert(TABLE_SENSOR_DATA, null, values); // 插入数据
db.close(); db.close(); // 关闭数据库
return id; return id; // 返回ID
} }
/** /**
* *
*/ */
public long addSensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { public long addSensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { // 添加传感器数据记录(兼容旧版本)
return addSensorData(temperature, humidity, light, distance, timeMinutes, mode, false, ""); return addSensorData(temperature, humidity, light, distance, timeMinutes, mode, false, ""); // 调用添加传感器数据记录的方法
} }
/** /**
* *
*/ */
public List<SensorData> getAllSensorData() { public List<SensorData> getAllSensorData() { // 获取所有传感器数据
List<SensorData> dataList = new ArrayList<>(); List<SensorData> dataList = new ArrayList<>(); // 创建SensorData列表
String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC"; String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC"; // 创建查询语句
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.rawQuery(selectQuery, null); Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
SensorData data = createSensorDataFromCursor(cursor); SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象
dataList.add(data); dataList.add(data); // 添加到列表
} while (cursor.moveToNext()); } while (cursor.moveToNext());
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return dataList; return dataList; // 返回数据列表
} }
/** /**
* N * N
*/ */
public List<SensorData> getRecentData(int limit) { public List<SensorData> getRecentData(int limit) { // 获取最近N条记录
List<SensorData> dataList = new ArrayList<>(); List<SensorData> dataList = new ArrayList<>(); // 创建SensorData列表
String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC LIMIT " + limit; String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC LIMIT " + limit; // 创建查询语句
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.rawQuery(selectQuery, null); Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
SensorData data = createSensorDataFromCursor(cursor); SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象
dataList.add(data); dataList.add(data); // 添加到列表
} while (cursor.moveToNext()); } while (cursor.moveToNext());
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return dataList; return dataList; // 返回数据列表
} }
/** /**
* *
*/ */
public List<SensorData> getDataByDateRange(String startDate, String endDate) { public List<SensorData> getDataByDateRange(String startDate, String endDate) { // 获取指定日期范围的数据
List<SensorData> dataList = new ArrayList<>(); List<SensorData> dataList = new ArrayList<>(); // 创建SensorData列表
String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA +
" WHERE " + COLUMN_TIMESTAMP + " BETWEEN '" + startDate + "' AND '" + endDate + "'" + " WHERE " + COLUMN_TIMESTAMP + " BETWEEN '" + startDate + "' AND '" + endDate + "'" + // 创建查询语句
" ORDER BY " + COLUMN_TIMESTAMP + " ASC"; " ORDER BY " + COLUMN_TIMESTAMP + " ASC";
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.rawQuery(selectQuery, null); Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
SensorData data = createSensorDataFromCursor(cursor); SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象
dataList.add(data); dataList.add(data); // 添加到列表
} while (cursor.moveToNext()); } while (cursor.moveToNext());
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return dataList; return dataList; // 返回数据列表
} }
/** /**
* *
*/ */
public List<SensorData> getDataByTriggerStatus(boolean isTriggered) { public List<SensorData> getDataByTriggerStatus(boolean isTriggered) { // 按触发状态筛选数据
List<SensorData> dataList = new ArrayList<>(); List<SensorData> dataList = new ArrayList<>(); // 创建SensorData列表
String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA +
" WHERE " + COLUMN_IS_TRIGGERED + " = ?" + " WHERE " + COLUMN_IS_TRIGGERED + " = ?" + // 创建查询语句
" ORDER BY " + COLUMN_TIMESTAMP + " DESC"; " ORDER BY " + COLUMN_TIMESTAMP + " DESC";
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.rawQuery(selectQuery, new String[]{isTriggered ? "1" : "0"}); Cursor cursor = db.rawQuery(selectQuery, new String[]{isTriggered ? "1" : "0"}); // 执行查询
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
SensorData data = createSensorDataFromCursor(cursor); SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象
dataList.add(data); dataList.add(data); // 添加到列表
} while (cursor.moveToNext()); } while (cursor.moveToNext());
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return dataList; return dataList; // 返回数据列表
} }
/** /**
* *
*/ */
public List<SensorData> getDataByDateRangeAndTriggerStatus(String startDate, String endDate, Boolean isTriggered) { public List<SensorData> getDataByDateRangeAndTriggerStatus(String startDate, String endDate, Boolean isTriggered) { // 按时间区段和触发状态筛选数据
List<SensorData> dataList = new ArrayList<>(); List<SensorData> dataList = new ArrayList<>(); // 创建SensorData列表
StringBuilder queryBuilder = new StringBuilder(); StringBuilder queryBuilder = new StringBuilder(); // 创建StringBuilder对象
queryBuilder.append("SELECT * FROM ").append(TABLE_SENSOR_DATA) queryBuilder.append("SELECT * FROM ").append(TABLE_SENSOR_DATA) // 创建查询语句
.append(" WHERE ").append(COLUMN_TIMESTAMP) .append(" WHERE ").append(COLUMN_TIMESTAMP)
.append(" BETWEEN '").append(startDate).append("' AND '").append(endDate).append("'"); .append(" BETWEEN '").append(startDate).append("' AND '").append(endDate).append("'"); // 创建查询语句
if (isTriggered != null) { if (isTriggered != null) { // 如果触发状态不为空
queryBuilder.append(" AND ").append(COLUMN_IS_TRIGGERED).append(" = ").append(isTriggered ? "1" : "0"); queryBuilder.append(" AND ").append(COLUMN_IS_TRIGGERED).append(" = ").append(isTriggered ? "1" : "0");
} }
queryBuilder.append(" ORDER BY ").append(COLUMN_TIMESTAMP).append(" ASC"); queryBuilder.append(" ORDER BY ").append(COLUMN_TIMESTAMP).append(" ASC");
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.rawQuery(queryBuilder.toString(), null); Cursor cursor = db.rawQuery(queryBuilder.toString(), null); // 执行查询
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
SensorData data = createSensorDataFromCursor(cursor); SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象
dataList.add(data); dataList.add(data); // 添加到列表
} while (cursor.moveToNext()); } while (cursor.moveToNext());
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return dataList; return dataList; // 返回数据列表
} }
/** /**
* *
*/ */
public DataStatistics getDataStatistics() { public DataStatistics getDataStatistics() { // 获取数据统计信息
DataStatistics stats = new DataStatistics(); DataStatistics stats = new DataStatistics(); // 创建DataStatistics对象
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
// 获取总记录数 // 获取总记录数
Cursor countCursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); Cursor countCursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); // 执行查询
if (countCursor.moveToFirst()) { if (countCursor.moveToFirst()) { // 如果游标移动到第一行
stats.setTotalRecords(countCursor.getInt(0)); stats.setTotalRecords(countCursor.getInt(0)); // 设置总记录数
} }
countCursor.close(); countCursor.close(); // 关闭游标
// 获取温度统计 // 获取温度统计
Cursor tempCursor = db.rawQuery("SELECT MIN(" + COLUMN_TEMPERATURE + "), MAX(" + COLUMN_TEMPERATURE + "), AVG(" + COLUMN_TEMPERATURE + ") FROM " + TABLE_SENSOR_DATA, null); Cursor tempCursor = db.rawQuery("SELECT MIN(" + COLUMN_TEMPERATURE + "), MAX(" + COLUMN_TEMPERATURE + "), AVG(" + COLUMN_TEMPERATURE + ") FROM " + TABLE_SENSOR_DATA, null); // 执行查询
if (tempCursor.moveToFirst()) { if (tempCursor.moveToFirst()) { // 如果游标移动到第一行
stats.setMinTemperature(tempCursor.getInt(0)); stats.setMinTemperature(tempCursor.getInt(0)); // 设置最小温度
stats.setMaxTemperature(tempCursor.getInt(1)); stats.setMaxTemperature(tempCursor.getInt(1)); // 设置最大温度
stats.setAvgTemperature(tempCursor.getFloat(2)); stats.setAvgTemperature(tempCursor.getFloat(2)); // 设置平均温度
} }
tempCursor.close(); tempCursor.close(); // 关闭游标
// 获取湿度统计 // 获取湿度统计
Cursor humiCursor = db.rawQuery("SELECT MIN(" + COLUMN_HUMIDITY + "), MAX(" + COLUMN_HUMIDITY + "), AVG(" + COLUMN_HUMIDITY + ") FROM " + TABLE_SENSOR_DATA, null); Cursor humiCursor = db.rawQuery("SELECT MIN(" + COLUMN_HUMIDITY + "), MAX(" + COLUMN_HUMIDITY + "), AVG(" + COLUMN_HUMIDITY + ") FROM " + TABLE_SENSOR_DATA, null); // 执行查询
if (humiCursor.moveToFirst()) { if (humiCursor.moveToFirst()) { // 如果游标移动到第一行
stats.setMinHumidity(humiCursor.getInt(0)); stats.setMinHumidity(humiCursor.getInt(0)); // 设置最小湿度
stats.setMaxHumidity(humiCursor.getInt(1)); stats.setMaxHumidity(humiCursor.getInt(1)); // 设置最大湿度
stats.setAvgHumidity(humiCursor.getFloat(2)); stats.setAvgHumidity(humiCursor.getFloat(2)); // 设置平均湿度
} }
humiCursor.close(); humiCursor.close(); // 关闭游标
// 获取光照统计 // 获取光照统计
Cursor lightCursor = db.rawQuery("SELECT MIN(" + COLUMN_LIGHT + "), MAX(" + COLUMN_LIGHT + "), AVG(" + COLUMN_LIGHT + ") FROM " + TABLE_SENSOR_DATA, null); Cursor lightCursor = db.rawQuery("SELECT MIN(" + COLUMN_LIGHT + "), MAX(" + COLUMN_LIGHT + "), AVG(" + COLUMN_LIGHT + ") FROM " + TABLE_SENSOR_DATA, null); // 执行查询
if (lightCursor.moveToFirst()) { if (lightCursor.moveToFirst()) { // 如果游标移动到第一行
stats.setMinLight(lightCursor.getInt(0)); stats.setMinLight(lightCursor.getInt(0)); // 设置最小光照
stats.setMaxLight(lightCursor.getInt(1)); stats.setMaxLight(lightCursor.getInt(1)); // 设置最大光照
stats.setAvgLight(lightCursor.getFloat(2)); stats.setAvgLight(lightCursor.getFloat(2)); // 设置平均光照
} }
lightCursor.close(); lightCursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return stats; return stats; // 返回数据统计信息
} }
/** /**
* *
*/ */
public int deleteOldData(int daysToKeep) { public int deleteOldData(int daysToKeep) { // 删除指定天数之前的数据
SQLiteDatabase db = this.getWritableDatabase(); SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库
// 计算删除时间点 // 计算删除时间点
long cutoffTime = System.currentTimeMillis() - (daysToKeep * 24 * 60 * 60 * 1000L); long cutoffTime = System.currentTimeMillis() - (daysToKeep * 24 * 60 * 60 * 1000L); // 计算删除时间点
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 创建SimpleDateFormat对象
String cutoffDate = sdf.format(new Date(cutoffTime)); String cutoffDate = sdf.format(new Date(cutoffTime)); // 计算删除时间点
int deletedRows = db.delete(TABLE_SENSOR_DATA, COLUMN_TIMESTAMP + " < ?", new String[]{cutoffDate}); int deletedRows = db.delete(TABLE_SENSOR_DATA, COLUMN_TIMESTAMP + " < ?", new String[]{cutoffDate}); // 删除数据
db.close(); db.close(); // 关闭数据库
return deletedRows; return deletedRows; // 返回删除的行数
} }
/** /**
* *
*/ */
public void clearAllData() { public void clearAllData() { // 清空所有数据
SQLiteDatabase db = this.getWritableDatabase(); SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库
db.delete(TABLE_SENSOR_DATA, null, null); db.delete(TABLE_SENSOR_DATA, null, null); // 删除所有数据
db.close(); db.close(); // 关闭数据库
} }
/** /**
* CursorSensorData * CursorSensorData
*/ */
private SensorData createSensorDataFromCursor(Cursor cursor) { private SensorData createSensorDataFromCursor(Cursor cursor) { // 从Cursor创建SensorData对象
SensorData data = new SensorData(); SensorData data = new SensorData(); // 创建SensorData对象
data.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_ID))); data.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_ID))); // 设置ID
data.setTimestamp(cursor.getString(cursor.getColumnIndex(COLUMN_TIMESTAMP))); data.setTimestamp(cursor.getString(cursor.getColumnIndex(COLUMN_TIMESTAMP))); // 设置时间戳
data.setTemperature(cursor.getInt(cursor.getColumnIndex(COLUMN_TEMPERATURE))); data.setTemperature(cursor.getInt(cursor.getColumnIndex(COLUMN_TEMPERATURE))); // 设置温度
data.setHumidity(cursor.getInt(cursor.getColumnIndex(COLUMN_HUMIDITY))); data.setHumidity(cursor.getInt(cursor.getColumnIndex(COLUMN_HUMIDITY))); // 设置湿度
data.setLight(cursor.getInt(cursor.getColumnIndex(COLUMN_LIGHT))); data.setLight(cursor.getInt(cursor.getColumnIndex(COLUMN_LIGHT))); // 设置光照
data.setDistance(cursor.getInt(cursor.getColumnIndex(COLUMN_DISTANCE))); data.setDistance(cursor.getInt(cursor.getColumnIndex(COLUMN_DISTANCE))); // 设置距离
data.setTimeMinutes(cursor.getInt(cursor.getColumnIndex(COLUMN_TIME_MINUTES))); data.setTimeMinutes(cursor.getInt(cursor.getColumnIndex(COLUMN_TIME_MINUTES))); // 设置时间(分钟)
data.setMode(cursor.getString(cursor.getColumnIndex(COLUMN_MODE))); data.setMode(cursor.getString(cursor.getColumnIndex(COLUMN_MODE))); // 设置模式
// 处理新增字段(兼容旧数据) // 处理新增字段(兼容旧数据)
int triggeredColumnIndex = cursor.getColumnIndex(COLUMN_IS_TRIGGERED); int triggeredColumnIndex = cursor.getColumnIndex(COLUMN_IS_TRIGGERED); // 获取触发状态列索引
if (triggeredColumnIndex >= 0) { if (triggeredColumnIndex >= 0) { // 如果触发状态列存在
data.setTriggered(cursor.getInt(triggeredColumnIndex) == 1); data.setTriggered(cursor.getInt(triggeredColumnIndex) == 1); // 设置触发状态
} else { } else {
data.setTriggered(false); data.setTriggered(false); // 设置触发状态
} }
int conditionsColumnIndex = cursor.getColumnIndex(COLUMN_TRIGGER_CONDITIONS); int conditionsColumnIndex = cursor.getColumnIndex(COLUMN_TRIGGER_CONDITIONS); // 获取触发条件列索引
if (conditionsColumnIndex >= 0) { if (conditionsColumnIndex >= 0) { // 如果触发条件列存在
data.setTriggerConditions(cursor.getString(conditionsColumnIndex)); data.setTriggerConditions(cursor.getString(conditionsColumnIndex)); // 设置触发条件
} else { } else {
data.setTriggerConditions(""); data.setTriggerConditions(""); // 设置触发条件
} }
return data; return data; // 返回SensorData对象
} }
/** /**
* *
*/ */
private String getCurrentTimestamp() { private String getCurrentTimestamp() { // 获取当前时间戳
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 创建SimpleDateFormat对象
return sdf.format(new Date()); return sdf.format(new Date()); // 返回当前时间戳
} }
/** /**
* *
*/ */
public int getRecordCount() { public int getRecordCount() { // 获取数据库记录总数
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); // 执行查询
int count = 0; int count = 0; // 记录总数
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) { // 如果游标移动到第一行
count = cursor.getInt(0); count = cursor.getInt(0); // 设置记录总数
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return count; return count; // 返回记录总数
} }
// ========== 预设方案管理方法 ========== // ========== 预设方案管理方法 ==========
@ -416,163 +416,163 @@ public class DatabaseHelper extends SQLiteOpenHelper {
/** /**
* *
*/ */
private void insertDefaultPresets(SQLiteDatabase db) { private void insertDefaultPresets(SQLiteDatabase db) { // 插入默认预设方案
ContentValues values = new ContentValues(); ContentValues values = new ContentValues(); // 创建ContentValues对象
// 默认方案1普通检测 // 默认方案1普通检测
values.put(COLUMN_PRESET_NAME, "普通检测"); values.put(COLUMN_PRESET_NAME, "普通检测"); // 设置预设方案名称
values.put(COLUMN_PRESET_DESCRIPTION, "适用于一般环境的检测设置"); values.put(COLUMN_PRESET_DESCRIPTION, "适用于一般环境的检测设置"); // 设置预设方案描述
values.put(COLUMN_PRESET_TEMP_THRESHOLD, 45); values.put(COLUMN_PRESET_TEMP_THRESHOLD, 45); // 设置温度阈值
values.put(COLUMN_PRESET_HUMI_THRESHOLD, 35); values.put(COLUMN_PRESET_HUMI_THRESHOLD, 35); // 设置湿度阈值
values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 10); values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 10); // 设置距离阈值
values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 70); values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 70); // 设置光照阈值
values.put(COLUMN_PRESET_RECORD_INTERVAL, 1000); values.put(COLUMN_PRESET_RECORD_INTERVAL, 1000); // 设置记录间隔
values.put(COLUMN_PRESET_AUTO_RECORD, 1); values.put(COLUMN_PRESET_AUTO_RECORD, 1); // 设置自动记录
values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间
values.put(COLUMN_PRESET_IS_DEFAULT, 1); values.put(COLUMN_PRESET_IS_DEFAULT, 1); // 设置是否默认
db.insert(TABLE_PRESET_SCHEMES, null, values); db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据
// 默认方案2高精度检测 // 默认方案2高精度检测
values.clear(); values.clear(); // 清空ContentValues对象
values.put(COLUMN_PRESET_NAME, "高精度检测"); values.put(COLUMN_PRESET_NAME, "高精度检测"); // 设置预设方案名称
values.put(COLUMN_PRESET_DESCRIPTION, "高频率记录,适用于精密监控"); values.put(COLUMN_PRESET_DESCRIPTION, "高频率记录,适用于精密监控"); // 设置预设方案描述
values.put(COLUMN_PRESET_TEMP_THRESHOLD, 40); values.put(COLUMN_PRESET_TEMP_THRESHOLD, 40); // 设置温度阈值
values.put(COLUMN_PRESET_HUMI_THRESHOLD, 30); values.put(COLUMN_PRESET_HUMI_THRESHOLD, 30); // 设置湿度阈值
values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 5); values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 5); // 设置距离阈值
values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 80); values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 80); // 设置光照阈值
values.put(COLUMN_PRESET_RECORD_INTERVAL, 500); values.put(COLUMN_PRESET_RECORD_INTERVAL, 500); // 设置记录间隔
values.put(COLUMN_PRESET_AUTO_RECORD, 1); values.put(COLUMN_PRESET_AUTO_RECORD, 1); // 设置自动记录
values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间
values.put(COLUMN_PRESET_IS_DEFAULT, 1); values.put(COLUMN_PRESET_IS_DEFAULT, 1); // 设置是否默认
db.insert(TABLE_PRESET_SCHEMES, null, values); db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据
// 默认方案3节能检测 // 默认方案3节能检测
values.clear(); values.clear(); // 清空ContentValues对象
values.put(COLUMN_PRESET_NAME, "节能检测"); values.put(COLUMN_PRESET_NAME, "节能检测"); // 设置预设方案名称
values.put(COLUMN_PRESET_DESCRIPTION, "低频率记录,适用于长期监控"); values.put(COLUMN_PRESET_DESCRIPTION, "低频率记录,适用于长期监控"); // 设置预设方案描述
values.put(COLUMN_PRESET_TEMP_THRESHOLD, 50); values.put(COLUMN_PRESET_TEMP_THRESHOLD, 50); // 设置温度阈值
values.put(COLUMN_PRESET_HUMI_THRESHOLD, 40); values.put(COLUMN_PRESET_HUMI_THRESHOLD, 40); // 设置湿度阈值
values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 15); values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 15); // 设置距离阈值
values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 60); values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 60); // 设置光照阈值
values.put(COLUMN_PRESET_RECORD_INTERVAL, 5000); values.put(COLUMN_PRESET_RECORD_INTERVAL, 5000); // 设置记录间隔
values.put(COLUMN_PRESET_AUTO_RECORD, 1); values.put(COLUMN_PRESET_AUTO_RECORD, 1); // 设置自动记录
values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间
values.put(COLUMN_PRESET_IS_DEFAULT, 1); values.put(COLUMN_PRESET_IS_DEFAULT, 1); // 设置是否默认
db.insert(TABLE_PRESET_SCHEMES, null, values); db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据
} }
/** /**
* *
*/ */
public List<PresetScheme> getAllPresetSchemes() { public List<PresetScheme> getAllPresetSchemes() { // 获取所有预设方案
List<PresetScheme> schemes = new ArrayList<>(); List<PresetScheme> schemes = new ArrayList<>(); // 创建PresetScheme列表
String selectQuery = "SELECT * FROM " + TABLE_PRESET_SCHEMES + " ORDER BY " + COLUMN_PRESET_IS_DEFAULT + " DESC, " + COLUMN_PRESET_CREATED_TIME + " DESC"; String selectQuery = "SELECT * FROM " + TABLE_PRESET_SCHEMES + " ORDER BY " + COLUMN_PRESET_IS_DEFAULT + " DESC, " + COLUMN_PRESET_CREATED_TIME + " DESC"; // 创建查询语句
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.rawQuery(selectQuery, null); Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
PresetScheme scheme = createPresetSchemeFromCursor(cursor); PresetScheme scheme = createPresetSchemeFromCursor(cursor); // 创建PresetScheme对象
schemes.add(scheme); schemes.add(scheme); // 添加到列表
} while (cursor.moveToNext()); } while (cursor.moveToNext()); // 移动到下一行
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return schemes; return schemes; // 返回预设方案列表
} }
/** /**
* *
*/ */
public long addPresetScheme(String name, String description, int tempThreshold, int humiThreshold, public long addPresetScheme(String name, String description, int tempThreshold, int humiThreshold,
int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { // 添加预设方案
SQLiteDatabase db = this.getWritableDatabase(); SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库
ContentValues values = new ContentValues(); ContentValues values = new ContentValues(); // 创建ContentValues对象
values.put(COLUMN_PRESET_NAME, name); values.put(COLUMN_PRESET_NAME, name); // 设置预设方案名称
values.put(COLUMN_PRESET_DESCRIPTION, description); values.put(COLUMN_PRESET_DESCRIPTION, description); // 设置预设方案描述
values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); // 设置温度阈值
values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); // 设置湿度阈值
values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); // 设置距离阈值
values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); // 设置光照阈值
values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); // 设置记录间隔
values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); // 设置自动记录
values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间
values.put(COLUMN_PRESET_IS_DEFAULT, 0); values.put(COLUMN_PRESET_IS_DEFAULT, 0); // 设置是否默认
long id = db.insert(TABLE_PRESET_SCHEMES, null, values); long id = db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据
db.close(); db.close(); // 关闭数据库
return id; return id; // 返回ID
} }
/** /**
* *
*/ */
public int updatePresetScheme(long id, String name, String description, int tempThreshold, int humiThreshold, public int updatePresetScheme(long id, String name, String description, int tempThreshold, int humiThreshold,
int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { // 更新预设方案
SQLiteDatabase db = this.getWritableDatabase(); SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库
ContentValues values = new ContentValues(); ContentValues values = new ContentValues(); // 创建ContentValues对象
values.put(COLUMN_PRESET_NAME, name); values.put(COLUMN_PRESET_NAME, name); // 设置预设方案名称
values.put(COLUMN_PRESET_DESCRIPTION, description); values.put(COLUMN_PRESET_DESCRIPTION, description); // 设置预设方案描述
values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); // 设置温度阈值
values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); // 设置湿度阈值
values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); // 设置距离阈值
values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); // 设置光照阈值
values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); // 设置记录间隔
values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); // 设置自动记录
int rowsAffected = db.update(TABLE_PRESET_SCHEMES, values, COLUMN_PRESET_ID + " = ?", new String[]{String.valueOf(id)}); int rowsAffected = db.update(TABLE_PRESET_SCHEMES, values, COLUMN_PRESET_ID + " = ?", new String[]{String.valueOf(id)}); // 更新数据
db.close(); db.close(); // 关闭数据库
return rowsAffected; return rowsAffected; // 返回受影响的行数
} }
/** /**
* *
*/ */
public int deletePresetScheme(long id) { public int deletePresetScheme(long id) { // 删除预设方案
SQLiteDatabase db = this.getWritableDatabase(); SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库
int rowsAffected = db.delete(TABLE_PRESET_SCHEMES, COLUMN_PRESET_ID + " = ? AND " + COLUMN_PRESET_IS_DEFAULT + " = 0", new String[]{String.valueOf(id)}); int rowsAffected = db.delete(TABLE_PRESET_SCHEMES, COLUMN_PRESET_ID + " = ? AND " + COLUMN_PRESET_IS_DEFAULT + " = 0", new String[]{String.valueOf(id)}); // 删除数据
db.close(); db.close(); // 关闭数据库
return rowsAffected; return rowsAffected; // 返回受影响的行数
} }
/** /**
* ID * ID
*/ */
public PresetScheme getPresetSchemeById(long id) { public PresetScheme getPresetSchemeById(long id) { // 根据ID获取预设方案
SQLiteDatabase db = this.getReadableDatabase(); SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库
Cursor cursor = db.query(TABLE_PRESET_SCHEMES, null, COLUMN_PRESET_ID + " = ?", Cursor cursor = db.query(TABLE_PRESET_SCHEMES, null, COLUMN_PRESET_ID + " = ?",
new String[]{String.valueOf(id)}, null, null, null); new String[]{String.valueOf(id)}, null, null, null); // 执行查询
PresetScheme scheme = null; PresetScheme scheme = null; // 创建PresetScheme对象
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) { // 如果游标移动到第一行
scheme = createPresetSchemeFromCursor(cursor); scheme = createPresetSchemeFromCursor(cursor); // 创建PresetScheme对象
} }
cursor.close(); cursor.close(); // 关闭游标
db.close(); db.close(); // 关闭数据库
return scheme; return scheme; // 返回PresetScheme对象
} }
/** /**
* CursorPresetScheme * CursorPresetScheme
*/ */
private PresetScheme createPresetSchemeFromCursor(Cursor cursor) { private PresetScheme createPresetSchemeFromCursor(Cursor cursor) { // 从Cursor创建PresetScheme对象
PresetScheme scheme = new PresetScheme(); PresetScheme scheme = new PresetScheme(); // 创建PresetScheme对象
scheme.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_PRESET_ID))); scheme.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_PRESET_ID))); // 设置ID
scheme.setName(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_NAME))); scheme.setName(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_NAME))); // 设置名称
scheme.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_DESCRIPTION))); scheme.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_DESCRIPTION))); // 设置描述
scheme.setTempThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_TEMP_THRESHOLD))); scheme.setTempThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_TEMP_THRESHOLD))); // 设置温度阈值
scheme.setHumiThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_HUMI_THRESHOLD))); scheme.setHumiThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_HUMI_THRESHOLD))); // 设置湿度阈值
scheme.setDistanceThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_DISTANCE_THRESHOLD))); scheme.setDistanceThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_DISTANCE_THRESHOLD))); // 设置距离阈值
scheme.setLightThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_LIGHT_THRESHOLD))); scheme.setLightThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_LIGHT_THRESHOLD))); // 设置光照阈值
scheme.setRecordInterval(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_RECORD_INTERVAL))); scheme.setRecordInterval(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_RECORD_INTERVAL))); // 设置记录间隔
scheme.setAutoRecord(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_AUTO_RECORD)) == 1); scheme.setAutoRecord(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_AUTO_RECORD)) == 1); // 设置自动记录
scheme.setCreatedTime(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_CREATED_TIME))); scheme.setCreatedTime(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_CREATED_TIME))); // 设置创建时间
scheme.setIsDefault(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_IS_DEFAULT)) == 1); scheme.setIsDefault(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_IS_DEFAULT)) == 1); // 设置是否默认
return scheme; return scheme; // 返回PresetScheme对象
} }
} }

@ -3,110 +3,110 @@ package com.test.Bluetooh_736_2.Models;
/** /**
* *
*/ */
public class DataStatistics { public class DataStatistics { // 数据统计模型类
private int totalRecords; private int totalRecords; // 总记录数
// 温度统计 // 温度统计
private int minTemperature; private int minTemperature; // 最小温度
private int maxTemperature; private int maxTemperature; // 最大温度
private float avgTemperature; private float avgTemperature; // 平均温度
// 湿度统计 // 湿度统计
private int minHumidity; private int minHumidity; // 最小湿度
private int maxHumidity; private int maxHumidity; // 最大湿度
private float avgHumidity; private float avgHumidity; // 平均湿度
// 光照统计 // 光照统计
private int minLight; private int minLight; // 最小光照
private int maxLight; private int maxLight; // 最大光照
private float avgLight; private float avgLight; // 平均光照
// 构造函数 // 构造函数
public DataStatistics() {} public DataStatistics() {} // 构造函数
// Getter 和 Setter 方法 // Getter 和 Setter 方法
public int getTotalRecords() { public int getTotalRecords() { // 获取总记录数
return totalRecords; return totalRecords; // 返回总记录数
} }
public void setTotalRecords(int totalRecords) { public void setTotalRecords(int totalRecords) { // 设置总记录数
this.totalRecords = totalRecords; this.totalRecords = totalRecords; // 设置总记录数
} }
public int getMinTemperature() { public int getMinTemperature() { // 获取最小温度
return minTemperature; return minTemperature; // 返回最小温度
} }
public void setMinTemperature(int minTemperature) { public void setMinTemperature(int minTemperature) { // 设置最小温度
this.minTemperature = minTemperature; this.minTemperature = minTemperature; // 设置最小温度
} }
public int getMaxTemperature() { public int getMaxTemperature() { // 获取最大温度
return maxTemperature; return maxTemperature; // 返回最大温度
} }
public void setMaxTemperature(int maxTemperature) { public void setMaxTemperature(int maxTemperature) { // 设置最大温度
this.maxTemperature = maxTemperature; this.maxTemperature = maxTemperature; // 设置最大温度
} }
public float getAvgTemperature() { public float getAvgTemperature() { // 获取平均温度
return avgTemperature; return avgTemperature; // 返回平均温度
} }
public void setAvgTemperature(float avgTemperature) { public void setAvgTemperature(float avgTemperature) { // 设置平均温度
this.avgTemperature = avgTemperature; this.avgTemperature = avgTemperature; // 设置平均温度
} }
public int getMinHumidity() { public int getMinHumidity() { // 获取最小湿度
return minHumidity; return minHumidity; // 返回最小湿度
} }
public void setMinHumidity(int minHumidity) { public void setMinHumidity(int minHumidity) { // 设置最小湿度
this.minHumidity = minHumidity; this.minHumidity = minHumidity; // 设置最小湿度
} }
public int getMaxHumidity() { public int getMaxHumidity() { // 获取最大湿度
return maxHumidity; return maxHumidity; // 返回最大湿度
} }
public void setMaxHumidity(int maxHumidity) { public void setMaxHumidity(int maxHumidity) { // 设置最大湿度
this.maxHumidity = maxHumidity; this.maxHumidity = maxHumidity; // 设置最大湿度
} }
public float getAvgHumidity() { public float getAvgHumidity() { // 获取平均湿度
return avgHumidity; return avgHumidity;
} }
public void setAvgHumidity(float avgHumidity) { public void setAvgHumidity(float avgHumidity) {
this.avgHumidity = avgHumidity; this.avgHumidity = avgHumidity; // 设置平均湿度
} }
public int getMinLight() { public int getMinLight() { // 获取最小光照
return minLight; return minLight; // 返回最小光照
} }
public void setMinLight(int minLight) { public void setMinLight(int minLight) { // 设置最小光照
this.minLight = minLight; this.minLight = minLight; // 设置最小光照
} }
public int getMaxLight() { public int getMaxLight() { // 获取最大光照
return maxLight; return maxLight; // 返回最大光照
} }
public void setMaxLight(int maxLight) { public void setMaxLight(int maxLight) { // 设置最大光照
this.maxLight = maxLight; this.maxLight = maxLight; // 设置最大光照
} }
public float getAvgLight() { public float getAvgLight() { // 获取平均光照
return avgLight; return avgLight; // 返回平均光照
} }
public void setAvgLight(float avgLight) { public void setAvgLight(float avgLight) { // 设置平均光照
this.avgLight = avgLight; this.avgLight = avgLight; // 设置平均光照
} }
@Override @Override
public String toString() { public String toString() { // 重写toString方法
return "DataStatistics{" + return "DataStatistics{" +
"totalRecords=" + totalRecords + "totalRecords=" + totalRecords +
", minTemperature=" + minTemperature + ", minTemperature=" + minTemperature +

@ -19,98 +19,98 @@ SensorData {
// 构造函数 // 构造函数
public SensorData() {} public SensorData() {}
public SensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { public SensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { // 构造函数
this.temperature = temperature; this.temperature = temperature;
this.humidity = humidity; this.humidity = humidity;
this.light = light; this.light = light; // 光照
this.distance = distance; this.distance = distance; // 距离
this.timeMinutes = timeMinutes; this.timeMinutes = timeMinutes; // 时间(分钟)
this.mode = mode; this.mode = mode; // 模式
} }
// Getter 和 Setter 方法 // Getter 和 Setter 方法
public long getId() { public long getId() {
return id; return id;
} }
public void setId(long id) { public void setId(long id) { // 设置ID
this.id = id; this.id = id;
} }
public String getTimestamp() { public String getTimestamp() { // 获取时间戳
return timestamp; return timestamp;
} }
public void setTimestamp(String timestamp) { public void setTimestamp(String timestamp) { // 设置时间戳
this.timestamp = timestamp; this.timestamp = timestamp;
} }
public int getTemperature() { public int getTemperature() { // 获取温度
return temperature; return temperature;
} }
public void setTemperature(int temperature) { public void setTemperature(int temperature) { // 设置温度
this.temperature = temperature; this.temperature = temperature;
} }
public int getHumidity() { public int getHumidity() { // 获取湿度
return humidity; return humidity;
} }
public void setHumidity(int humidity) { public void setHumidity(int humidity) { // 设置湿度
this.humidity = humidity; this.humidity = humidity;
} }
public int getLight() { public int getLight() { // 获取光照
return light; return light;
} }
public void setLight(int light) { public void setLight(int light) { // 设置光照
this.light = light; this.light = light;
} }
public int getDistance() { public int getDistance() { // 获取距离
return distance; return distance;
} }
public void setDistance(int distance) { public void setDistance(int distance) { // 设置距离
this.distance = distance; this.distance = distance;
} }
public int getTimeMinutes() { public int getTimeMinutes() { // 获取时间(分钟)
return timeMinutes; return timeMinutes;
} }
public void setTimeMinutes(int timeMinutes) { public void setTimeMinutes(int timeMinutes) { // 设置时间(分钟)
this.timeMinutes = timeMinutes; this.timeMinutes = timeMinutes;
} }
public String getMode() { public String getMode() { // 获取模式
return mode; return mode;
} }
public void setMode(String mode) { public void setMode(String mode) { // 设置模式
this.mode = mode; this.mode = mode;
} }
public boolean isTriggered() { public boolean isTriggered() { // 获取触发状态
return isTriggered; return isTriggered;
} }
public void setTriggered(boolean triggered) { public void setTriggered(boolean triggered) { // 设置触发状态
isTriggered = triggered; isTriggered = triggered;
} }
public String getTriggerConditions() { public String getTriggerConditions() { // 获取触发条件
return triggerConditions; return triggerConditions;
} }
public void setTriggerConditions(String triggerConditions) { public void setTriggerConditions(String triggerConditions) { // 设置触发条件
this.triggerConditions = triggerConditions; this.triggerConditions = triggerConditions;
} }
@Override @Override
public String toString() { public String toString() { // 重写toString方法
return "SensorData{" + return "SensorData{" +
"id=" + id + "id=" + id +
", timestamp='" + timestamp + '\'' + ", timestamp='" + timestamp + '\'' +

@ -0,0 +1,43 @@
# 战场检测系统包图
```
┌─────────────────────────────────────────────────────────────────┐
│ Activities Package │
│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│
│ │ MainActivity │ │ DeviceListActivity│ │ HistoryActivity ││
│ └──────────────────┘ └──────────────────┘ └─────────────────┘│
│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│
│ │ SettingsActivity │ │PresetManagerActivity│ │ChartAnalysisActivity││
│ └──────────────────┘ └──────────────────┘ └─────────────────┘│
└─────────────────────────────────────────────────────────────────┘
│ depends on
┌─────────────────────────────────────────────────────────────────┐
│ Database Package │
│ ┌──────────────────┐ │
│ │ DatabaseHelper │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│ depends on
┌─────────────────────────────────────────────────────────────────┐
│ Models Package │
│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│
│ │ SensorData │ │ PresetScheme │ │ DataStatistics ││
│ └──────────────────┘ └──────────────────┘ └─────────────────┘│
└─────────────────────────────────────────────────────────────────┘
│ extends/implements
┌─────────────────────────────────────────────────────────────────┐
│ Android Framework │
│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│
│ │ Activity │ │ SQLiteOpenHelper │ │BluetoothAdapter ││
│ └──────────────────┘ └──────────────────┘ └─────────────────┘│
│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│
│ │SharedPreferences │ │ Handler │ │ Vibrator ││
│ └──────────────────┘ └──────────────────┘ └─────────────────┘│
└─────────────────────────────────────────────────────────────────┘
```
Loading…
Cancel
Save