From 9e1b5bdccce634a0da4550048c6752bdaf0e8fe2 Mon Sep 17 00:00:00 2001 From: dxj <2490339921@qq.com> Date: Thu, 17 Apr 2025 15:46:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8Ajava\net\micode\notes\ui\Alar?= =?UTF-8?q?mInitReceiver.java=E6=96=87=E4=BB=B6=EF=BC=8C=E8=AF=A5=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=AE=9E=E7=8E=B0=E4=BA=86=E9=97=B9=E9=92=9F=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=B9=BF=E6=92=AD=E6=8E=A5=E6=94=B6=E5=99=A8?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=9C=A8=E7=B3=BB=E7=BB=9F=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E6=88=96=E6=97=B6=E9=97=B4=E5=8F=98=E6=9B=B4=E6=97=B6?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=AE=BE=E7=BD=AE=E6=89=80=E6=9C=89=E6=9C=AA?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E7=9A=84=E4=BE=BF=E7=AD=BE=E6=8F=90=E9=86=92?= =?UTF-8?q?=EF=BC=8C=E7=BB=A7=E6=89=BF=E8=87=AABroadcastReceiver=EF=BC=8C?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E7=B3=BB=E7=BB=9F=E5=B9=BF=E6=92=AD=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../micode/notes/ui/AlarmInitReceiver.java | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/java/net/micode/notes/ui/AlarmInitReceiver.java b/java/net/micode/notes/ui/AlarmInitReceiver.java index f221202..97a8cc8 100644 --- a/java/net/micode/notes/ui/AlarmInitReceiver.java +++ b/java/net/micode/notes/ui/AlarmInitReceiver.java @@ -16,6 +16,7 @@ package net.micode.notes.ui; +// 导入Android系统服务相关 import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -24,42 +25,59 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; +// 导入项目数据模型和常量 import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; - +/** + * 闹钟初始化广播接收器 - 用于在系统启动或时间变更时重新设置所有未触发的便签提醒 + * 继承自BroadcastReceiver,监听系统广播事件 + */ public class AlarmInitReceiver extends BroadcastReceiver { + // 数据库查询投影列(需要查询的字段) private static final String [] PROJECTION = new String [] { - NoteColumns.ID, - NoteColumns.ALERTED_DATE + NoteColumns.ID, // 便签ID列 + NoteColumns.ALERTED_DATE // 提醒时间列 }; - private static final int COLUMN_ID = 0; - private static final int COLUMN_ALERTED_DATE = 1; + // 列索引常量 + private static final int COLUMN_ID = 0; // ID列的索引 + private static final int COLUMN_ALERTED_DATE = 1; // 提醒时间列的索引 @Override public void onReceive(Context context, Intent intent) { - long currentDate = System.currentTimeMillis(); - Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, - PROJECTION, - NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, - new String[] { String.valueOf(currentDate) }, - null); + long currentDate = System.currentTimeMillis(); // 获取当前系统时间 + + // 查询内容提供者获取需要设置提醒的便签 + Cursor c = context.getContentResolver().query( + Notes.CONTENT_NOTE_URI, // 便签内容URI + PROJECTION, // 需要查询的列 + NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, // 筛选条件:提醒时间未过期且类型为普通便签 + new String[] { String.valueOf(currentDate) }, // 当前时间作为筛选参数 + null); // 排序方式(无) if (c != null) { - if (c.moveToFirst()) { + if (c.moveToFirst()) { // 游标移动到第一条记录 do { - long alertDate = c.getLong(COLUMN_ALERTED_DATE); + long alertDate = c.getLong(COLUMN_ALERTED_DATE); // 获取提醒时间 + + // 创建发送给AlarmReceiver的Intent Intent sender = new Intent(context, AlarmReceiver.class); + // 设置数据URI:Note内容URI + 当前便签ID sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); + + // 创建PendingIntent(延迟触发的广播) PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); - AlarmManager alermManager = (AlarmManager) context + + // 获取系统闹钟服务 + AlarmManager alarmManager = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); - alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); - } while (c.moveToNext()); + // 设置精确闹钟(RTC_WAKEUP会在指定时间唤醒设备) + alarmManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); + } while (c.moveToNext()); // 循环处理下一条记录 } - c.close(); + c.close(); // 关闭游标释放资源 } } -} +} \ No newline at end of file