From e4c1a5c113059a7f77bb4b68ddf51936032082e8 Mon Sep 17 00:00:00 2001 From: YPL233 <1796804833@qq.com> Date: Thu, 18 Jan 2024 15:57:39 +0800 Subject: [PATCH] =?UTF-8?q?2024.1.18=20=E5=B0=86=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E5=81=9A=E5=A5=BD=E7=9A=84=E5=86=85=E5=AE=B9=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../micode/notes/ui/AlarmInitReceiver.java | 39 +++++++++++++------ .../net/micode/notes/ui/AlarmReceiver.java | 6 +++ .../micode/notes/ui/DateTimePickerDialog.java | 31 ++++++++++++--- .../src/net/micode/notes/ui/DropdownMenu.java | 16 +++++--- 4 files changed, 70 insertions(+), 22 deletions(-) diff --git a/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java b/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java index f221202..98c1442 100644 --- a/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java +++ b/src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java @@ -27,39 +27,56 @@ import android.database.Cursor; import net.micode.notes.data.Notes; import net.micode.notes.data.Notes.NoteColumns; - +/** + * 当接收到广播时调用的方法 + */ public class AlarmInitReceiver extends BroadcastReceiver { - private static final String [] PROJECTION = new String [] { - NoteColumns.ID, - NoteColumns.ALERTED_DATE + private static final String[] PROJECTION = new String[]{ + NoteColumns.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; + 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) }, + new String[]{String.valueOf(currentDate)}, null); if (c != null) { if (c.moveToFirst()) { do { + // 获取提醒时间和备忘录的ID long alertDate = c.getLong(COLUMN_ALERTED_DATE); + long noteId = c.getLong(COLUMN_ID); + + // 创建一个新的Intent对象,并设置要启动的AlarmReceiver类 Intent sender = new Intent(context, AlarmReceiver.class); - sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID))); + // 设置Intent的数据为备忘录的URI + sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId)); + + // 创建一个PendingIntent对象,用于将Intent发送给AlarmReceiver类 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0); - AlarmManager alermManager = (AlarmManager) context - .getSystemService(Context.ALARM_SERVICE); - alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); + + // 获取系统的AlarmManager服务 + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + + // 设置闹钟,当提醒时间到达时,发送PendingIntent + alarmManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent); } while (c.moveToNext()); } c.close(); } } } + diff --git a/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java b/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java index 54e503b..bf351a6 100644 --- a/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java +++ b/src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java @@ -20,11 +20,17 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +/* +功能:用于接收广播并处理闹钟事件。 + */ public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + // 创建一个新的Intent对象,并设置要启动的Activity intent.setClass(context, AlarmAlertActivity.class); + // 为该Intent添加一个标志位,表示要以新的Task启动Activity intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + // 启动指定的Activity context.startActivity(intent); } } diff --git a/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java b/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java index 2c47ba4..670122e 100644 --- a/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java +++ b/src/Notes-master/src/net/micode/notes/ui/DateTimePickerDialog.java @@ -29,22 +29,37 @@ import android.content.DialogInterface.OnClickListener; import android.text.format.DateFormat; import android.text.format.DateUtils; +/** + *功能: + * 定义了一个名为DateTimePickerDialog的类 + * 继承自AlertDialog类 + * 并实现了OnClickListener接口 + * 主要功能是创建一个日期和时间选择器对话框,用于让用户选择日期和时间 + */ public class DateTimePickerDialog extends AlertDialog implements OnClickListener { - +//声明了一个Calendar对象mDate,用于存储选择的日期和时间。 private Calendar mDate = Calendar.getInstance(); + //声明了一个boolean类型的变量mIs24HourView,用于表示是否使用24小时制。 private boolean mIs24HourView; + //声明了一个OnDateTimeSetListener接口,用于监听日期和时间的设置。 private OnDateTimeSetListener mOnDateTimeSetListener; + //声明了一个DateTimePicker对象mDateTimePicker,用于显示日期和时间选择器。 private DateTimePicker mDateTimePicker; + //功能:定义了一个OnDateTimeSetListener接口,其中包含一个OnDateTimeSet()方法,用于在日期和时间被设置时回调。 public interface OnDateTimeSetListener { void OnDateTimeSet(AlertDialog dialog, long date); } - + //功能:DateTimePickerDialog的构造函数,接收一个Context对象和一个long类型的date参数。 public DateTimePickerDialog(Context context, long date) { + //调用父类AlertDialog的构造函数。 super(context); + //创建一个DateTimePicker对象,并设置为对话框的视图。 mDateTimePicker = new DateTimePicker(context); setView(mDateTimePicker); + //设置DateTimePicker的OnDateTimeChangedListener,当日期和时间发生改变时会回调onDateTimeChanged()方法。 mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { + //将给定的date参数设置给mDate,同时将秒数设置为0,并将当前的日期和时间设为DateTimePicker的当前选中值。 public void onDateTimeChanged(DateTimePicker view, int year, int month, int dayOfMonth, int hourOfDay, int minute) { mDate.set(Calendar.YEAR, year); @@ -55,23 +70,29 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener updateTitle(mDate.getTimeInMillis()); } }); + //设置对话框的第一个按钮的文本为确定,并设置点击监听为当前类。 mDate.setTimeInMillis(date); + //设置对话框的第二个按钮的文本为取消,点击监听为空。 mDate.set(Calendar.SECOND, 0); + //根据系统设置的时间制式,设置是否使用24小时制。 mDateTimePicker.setCurrentDate(mDate.getTimeInMillis()); + //更新对话框的标题,显示当前选中的日期和时间。 setButton(context.getString(R.string.datetime_dialog_ok), this); setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null); + set24HourView(DateFormat.is24HourFormat(this.getContext())); + updateTitle(mDate.getTimeInMillis()); } - + //设置是否使用24小时制。 public void set24HourView(boolean is24HourView) { mIs24HourView = is24HourView; } - + //设置一个OnDateTimeSetListener对象,用于监听日期和时间的设置。 public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) { mOnDateTimeSetListener = callBack; } - + //定义了一个私有方法updateTitle(),用于更新对话框的标题,根据给定的日期和时间。 private void updateTitle(long date) { int flag = DateUtils.FORMAT_SHOW_YEAR | diff --git a/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java b/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java index 613dc74..69de7df 100644 --- a/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java +++ b/src/Notes-master/src/net/micode/notes/ui/DropdownMenu.java @@ -27,14 +27,18 @@ import android.widget.PopupMenu.OnMenuItemClickListener; import net.micode.notes.R; +/* +功能:实现一个下拉菜单的功能 + */ + public class DropdownMenu { - private Button mButton; - private PopupMenu mPopupMenu; - private Menu mMenu; + private Button mButton;//定义了一个按钮对象 + private PopupMenu mPopupMenu;//定义弹出菜单 + private Menu mMenu;//菜单对象 public DropdownMenu(Context context, Button button, int menuId) { mButton = button; - mButton.setBackgroundResource(R.drawable.dropdown_icon); + mButton.setBackgroundResource(R.drawable.dropdown_icon);//设置按钮的样式 mPopupMenu = new PopupMenu(context, mButton); mMenu = mPopupMenu.getMenu(); mPopupMenu.getMenuInflater().inflate(menuId, mMenu); @@ -51,11 +55,11 @@ public class DropdownMenu { } } - public MenuItem findItem(int id) { + public MenuItem findItem(int id) {//方法接受一个id参数,表示要查找的菜单项的ID。 return mMenu.findItem(id); } - public void setTitle(CharSequence title) { + public void setTitle(CharSequence title) {//设置按钮的标题 mButton.setText(title); } }