From c837a5c4866c891ff4589b08b5dbd44ba7671bdf Mon Sep 17 00:00:00 2001 From: 12131 <1213171070@qq.com> Date: Thu, 20 Apr 2023 21:49:09 +0800 Subject: [PATCH] =?UTF-8?q?AlarmInitReceiver=E4=B8=8EAlarmAlertActivity?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../micode/notes/ui/AlarmAlertActivity.java | 121 +++++++----------- .../micode/notes/ui/AlarmInitReceiver.java | 16 +-- 2 files changed, 57 insertions(+), 80 deletions(-) diff --git a/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java b/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java index 598803a..06b476f 100644 --- a/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java +++ b/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java @@ -24,8 +24,8 @@ import net.micode.notes.tool.DataUtils; import java.io.IOException; public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { - private long mNoteId; //文本在数据库存储中的ID号 - private String mSnippet; //闹钟提示时出现的文本片段 + private long mNoteId;//文本在数据库存储中的ID号 + private String mSnippet;//闹钟提示时出现的文本片段 private static final int SNIPPET_PREW_MAX_LEN = 60; MediaPlayer mPlayer; @@ -35,69 +35,58 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD //Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的 //onsaveInstanceState方法是用来保存Activity的状态的 //能从onCreate的参数savedInsanceState中获得状态数据 - requestWindowFeature(Window.FEATURE_NO_TITLE); - //界面显示——无标题 + requestWindowFeature(Window.FEATURE_NO_TITLE);//界面显示——无标题 + final Window win = getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); if (!isScreenOn()) { win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON - //保持窗体点亮 - | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON - //将窗体点亮 - | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON - //允许窗体点亮时锁屏 - | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); + | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON//保持窗体点亮 + | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON//将窗体点亮 + | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);//允许窗体点亮时锁屏 }//在手机锁屏后如果到了闹钟提示时间,点亮屏幕 Intent intent = getIntent(); try { mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); - mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); - //根据ID从数据库中获取标签的内容; + mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId);//根据ID从数据库中获取标签的内容; //getContentResolver()是实现数据共享,实例存储。 - mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, + // + mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0,//判断标签片段是否达到符合长度 SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) : mSnippet; - //判断标签片段是否达到符合长度 } catch (IllegalArgumentException e) { e.printStackTrace(); return; } - /* - try + /*try { - // 代码区 + //代码区 } - catch(Exception e) - { - // 异常处理 + catch(Exception e){ + //异常处理 } - 代码区如果有错误,就会返回所写异常的处理。*/ + 代码区如果有错误,就会返回所写异常的处理。*/ mPlayer = new MediaPlayer(); if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { - showActionDialog(); - //弹出对话框 - playAlarmSound(); - //闹钟提示音激发 + showActionDialog();//弹出对话框 + playAlarmSound();//闹钟提示音激发 } else { - finish(); - //完成闹钟动作 + finish();//完成闹钟动作 } } - private boolean isScreenOn() { - //判断屏幕是否锁屏,调用系统函数判断,最后返回值是布尔类型 + private boolean isScreenOn() {//判断屏幕是否锁屏,调用系统函数判断,最后返回值是布尔类型 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); return pm.isScreenOn(); } - private void playAlarmSound() { - //闹钟提示音激发 + private void playAlarmSound() {//闹钟提示音激发 Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); - //调用系统的铃声管理URI,得到闹钟提示音 + //调用系统的铃声管理URI,并得到闹钟提示音 int silentModeStreams = Settings.System.getInt(getContentResolver(), Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); @@ -108,19 +97,16 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD } try { mPlayer.setDataSource(this, url); - //方法:setDataSource(Context context, Uri uri) - //解释:无返回值,设置多媒体数据来源【根据 Uri】 - mPlayer.prepare(); - //准备同步 - mPlayer.setLooping(true); - //设置是否循环播放 - mPlayer.start(); - //开始播放 + //方法:setDataSource(Context context, Uri uri); + //解释:无返回值,设置多媒体数据来源 ---【根据 Uri】 + mPlayer.prepare();//准备同步 + mPlayer.setLooping(true);//设置是否循环播放 + mPlayer.start();//开始播放 } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); - //e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息 - //System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常 + //e.printStackTrace()函数功能是抛出异常, 还将显示出更深的调用信息; + //System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常; } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -135,57 +121,48 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD private void showActionDialog() { AlertDialog.Builder dialog = new AlertDialog.Builder(this); - //AlertDialog的构造方法全部是Protected的 - //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。 - //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法 - //如这里的dialog就是新建了一个AlertDialog - dialog.setTitle(R.string.app_name); - //为对话框设置标题 - dialog.setMessage(mSnippet); - //为对话框设置内容 - dialog.setPositiveButton(R.string.notealert_ok, this); - //给对话框添加"Yes"按钮 + //AlertDialog的构造方法全部是Protected的; + //所以不能直接通过new一个AlertDialog来创建出一个AlertDialog; + //要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法; + //如这里的dialog就是新建了一个AlertDialog; + dialog.setTitle(R.string.app_name);//为对话框设置标题 + dialog.setMessage(mSnippet);//为对话框设置内容 + dialog.setPositiveButton(R.string.notealert_ok, this);//给对话框添加"Yes"按钮 if (isScreenOn()) { dialog.setNegativeButton(R.string.notealert_enter, this); - }//对话框添加"No"按钮 + }//对话框添加"No"按钮; dialog.show().setOnDismissListener(this); } public void onClick(DialogInterface dialog, int which) { - switch (which) { - //用which来选择click后下一步的操作 + switch (which) {//用which来选择click后下一步的操作 case DialogInterface.BUTTON_NEGATIVE: - //这是取消操作 + //这是取消操作; Intent intent = new Intent(this, NoteEditActivity.class); - //实现两个类间的数据传输 + //实现两个类间的数据传输; intent.setAction(Intent.ACTION_VIEW); - //设置动作属性 + //设置动作属性; intent.putExtra(Intent.EXTRA_UID, mNoteId); - //实现key-value对 - //EXTRA_UID为key;mNoteId为键 + //实现key-value对; + //EXTRA_UID为key;mNoteId为键; startActivity(intent); - //开始动作 + //开始动作; break; default: - //这是确定操作 + //这是确定操作; break; } } - public void onDismiss(DialogInterface dialog) { - //忽略 - stopAlarmSound(); - //停止闹钟声音 - finish(); - //完成该动作 + public void onDismiss(DialogInterface dialog) {//忽略 + stopAlarmSound();//停止闹钟声音 + finish();//完成该动作 } private void stopAlarmSound() { if (mPlayer != null) { - mPlayer.stop(); - //停止播放 - mPlayer.release(); - //释放MediaPlayer对象 + mPlayer.stop();//停止播放 + mPlayer.release();//释放MediaPlayer对象 mPlayer = null; } } diff --git a/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java b/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java index e1d28cc..5faa8ea 100644 --- a/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java +++ b/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java @@ -18,22 +18,22 @@ public class AlarmInitReceiver extends BroadcastReceiver { NoteColumns.ID, NoteColumns.ALERTED_DATE }; - //对数据库的操作,调用标签ID和闹钟时间 + //对数据库的操作,调用标签ID和闹钟时间; 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(); - //System.currentTimeMillis()产生一个当前的毫秒 - //这个毫秒其实就是自1970年1月1日0时起的毫秒数 + //System.currentTimeMillis()产生一个当前的毫秒; + //这个毫秒其实就是自1970年1月1日0时起的毫秒数; Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, PROJECTION, NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, new String[] { String.valueOf(currentDate) }, - //将long变量currentDate转化为字符串 + //将long变量currentDate转化为字符串; null); - //Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签 + //Cursor在这里的作用是通过查找数据库中的标签内容,找到和当前系统时间相等的标签; if (c != null) { if (c.moveToFirst()) { @@ -49,8 +49,8 @@ public class AlarmInitReceiver extends BroadcastReceiver { } c.close(); } - //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 - //如新建Intent、PendingIntent以及AlarmManager等 - //这里就是根据数据库里的闹钟时间创建一个闹钟机制 + //然而通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤; + //如新建Intent、PendingIntent以及AlarmManager等; + //这里就是根据数据库里的闹钟时间创建一个闹钟机制; } }