From fc9c12f13b3c577368d0186d5bf45e20950778ae Mon Sep 17 00:00:00 2001 From: pv6f9h3iu <1441728902@qq.com> Date: Mon, 16 Dec 2024 22:27:22 +0800 Subject: [PATCH] 111 --- AlarmInitReceiver-note.java | 89 +++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 AlarmInitReceiver-note.java diff --git a/AlarmInitReceiver-note.java b/AlarmInitReceiver-note.java new file mode 100644 index 0000000..243da74 --- /dev/null +++ b/AlarmInitReceiver-note.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; +// 定义当前类所属的包,通常用于组织代码并避免命名冲突 + +import android.app.AlarmManager; +// 导入Android的AlarmManager类,用于设置和管理闹钟 +import android.app.PendingIntent; +// 导入Android的PendingIntent类,用于在Future时刻发送意图(Intent) +import android.content.BroadcastReceiver; +// 导入Android的BroadcastReceiver类,用于接收广播消息 +import android.content.ContentUris; +// 导入Android的ContentUris类,用于处理内容提供者的URI +import android.content.Context; +// 导入Android的Context类,提供应用程序环境的描述 +import android.content.Intent; +// 导入Android的Intent类,用于在应用组件之间传递信息 +import android.database.Cursor; +// 导入Android的Cursor类,用于访问查询结果 + +import net.micode.notes.data.Notes; +// 导入应用程序的Notes类,表示笔记的数据模型 +import net.micode.notes.data.Notes.NoteColumns; +// 导入Notes类中的列定义,用于表明笔记的数据库字段 + + +public class AlarmInitReceiver extends BroadcastReceiver { +// 定义类 AlarmInitReceiver,继承自 BroadcastReceiver,用于处理广播接收 + + private static final String [] PROJECTION = new String [] { +// 定义一个字符串数组 PROJECTION,指定要查询的列 + NoteColumns.ID, // 笔记的 ID + NoteColumns.ALERTED_DATE // 笔记的提醒日期 + }; + + private static final int COLUMN_ID = 0; // 定义常量 COLUMN_ID,表示 ID 列的索引 + private static final int COLUMN_ALERTED_DATE = 1; // 定义常量 COLUMN_ALERTED_DATE,表示提醒日期列的索引 + + @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);//查询时的排序参数,这里设置为 null,表示使用默认排序。 + + if (c != null) { +//检查返回的 Cursor 是否为空,确保查询结果有效。 + if (c.moveToFirst()) { +//如果 Cursor 能移动到第一行,表示查询到有结果。 + do { +//开始循环处理每一行的查询结果。 + long alertDate = c.getLong(COLUMN_ALERTED_DATE); +//获取当前行的提醒日期,并将其赋值给 alertDate 变量。 + Intent sender = new Intent(context, AlarmReceiver.class); +//创建一个 Intent 对象,指定要发送到的接收者 AlarmReceiver。 + sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); +//设置 Intent 的数据为笔记的 URI,使用 ContentUris 类附加当前行的笔记 ID。 + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); +//创建一个 PendingIntent,用于将来发送广播,传递刚创建的 Intent。 + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); +//获取系统的 AlarmManager 服务,以便设置闹钟。 + alarmManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); +//使用 AlarmManager 设置一个闹钟,指定为 RTC_WAKEUP 模式,设置该闹钟的提醒时间为 alertDate,并关联到之前创建的 PendingIntent。 + }while (c.moveToNext()); +//移动到 Cursor 中的下一行,继续处理下一条查询结果,直到没有更多行。 + } + c.close(); +//关闭 Cursor,释放与其相关联的资源,防止内存泄漏。 + } + } +} \ No newline at end of file