From 7db4521cd49133a28ff936ec99f5cee9688755be Mon Sep 17 00:00:00 2001 From: pf45q8f3g <850847787@qq.com> Date: Sun, 12 Jan 2025 13:37:36 +0800 Subject: [PATCH] Update AlarmAlertActivity.java --- .../micode/notes/ui/AlarmAlertActivity.java | 171 +++++++----------- 1 file changed, 67 insertions(+), 104 deletions(-) diff --git a/src/java/net/micode/notes/ui/AlarmAlertActivity.java b/src/java/net/micode/notes/ui/AlarmAlertActivity.java index a124eed..7cc9f55 100644 --- a/src/java/net/micode/notes/ui/AlarmAlertActivity.java +++ b/src/java/net/micode/notes/ui/AlarmAlertActivity.java @@ -1,17 +1,15 @@ /* - * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * 版权所有 (c) 2010-2011, MiCode 开源社区 (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 + * 本文件授权使用 Apache License, Version 2.0(以下简称“许可证”); + * 除非符合许可证规定,否则不得使用此文件。 + * 您可以从以下网址获取许可证副本: * * 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. + * 除非适用法律要求或书面同意,否则根据许可证分发的软件 + * 均按“原样”分发,不附带任何明示或暗示的保证或条件。 + * 有关许可权限和限制的具体语言,请参阅许可证。 */ // 导入必要的类和接口 @@ -21,8 +19,6 @@ import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; -import android.content.DialogInterface.OnDismissListener; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; @@ -40,171 +36,138 @@ import net.micode.notes.tool.DataUtils; import java.io.IOException; -// AlarmAlertActivity类,继承自Activity,实现OnClickListener和OnDismissListener接口 -public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { - private long mNoteId; //文本在数据库存储中的ID号 - private String mSnippet; //闹钟提示时出现的文本片段 - private static final int SNIPPET_PREW_MAX_LEN = 60; - MediaPlayer mPlayer; - +/** + * AlarmAlertActivity 类用于处理闹钟提醒功能。 + * 当闹钟时间到达时,该 Activity 会被触发,显示一个对话框并播放闹钟声音。 + */ +public class AlarmAlertActivity extends Activity implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener { + private long mNoteId; // 便签在数据库中的 ID + private String mSnippet; // 闹钟提示时显示的文本片段 + private static final int SNIPPET_PREVIEW_MAX_LEN = 60; // 文本片段的最大长度 + private MediaPlayer mPlayer; // 用于播放闹钟声音的 MediaPlayer + @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //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); - + 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); - }//在手机锁屏后如果到了闹钟提示时间,点亮屏幕 - + } + Intent intent = getIntent(); - try { mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); - //根据ID从数据库中获取标签的内容; - //getContentResolver()是实现数据共享,实例存储。 - mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, - SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) - : mSnippet; - //判断标签片段是否达到符合长度 + if (mSnippet.length() > SNIPPET_PREVIEW_MAX_LEN) { + mSnippet = mSnippet.substring(0, SNIPPET_PREVIEW_MAX_LEN) + getResources().getString(R.string.notelist_string_info); + } } catch (IllegalArgumentException e) { e.printStackTrace(); return; } - /* - try - { - // 代码区 - } - catch(Exception e) - { - // 异常处理 - } - 代码区如果有错误,就会返回所写异常的处理。*/ + mPlayer = new MediaPlayer(); if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { showActionDialog(); - //弹出对话框 playAlarmSound(); - //闹钟提示音激发 } else { finish(); - //完成闹钟动作 } } - + + /** + * 检查屏幕是否处于开启状态。 + * @return true 表示屏幕开启,false 表示屏幕关闭。 + */ private boolean isScreenOn() { - //判断屏幕是否锁屏,调用系统函数判断,最后返回值是布尔类型 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); return pm.isScreenOn(); } - + + /** + * 播放闹钟声音。 + */ private void playAlarmSound() { - //闹钟提示音激发 Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); - //调用系统的铃声管理URI,得到闹钟提示音 - int silentModeStreams = Settings.System.getInt(getContentResolver(), - Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); - + int silentModeStreams = Settings.System.getInt(getContentResolver(), Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); + if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { mPlayer.setAudioStreamType(silentModeStreams); } else { mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); } + try { mPlayer.setDataSource(this, url); - //方法: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),这个方法打印出异常,并且输出在哪里出现的异常 - } catch (SecurityException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block + } catch (IllegalArgumentException | SecurityException | IllegalStateException | IOException e) { e.printStackTrace(); } } - + + /** + * 显示操作对话框。 + */ 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"按钮 if (isScreenOn()) { dialog.setNegativeButton(R.string.notealert_enter, this); - }//对话框添加"No"按钮 + } dialog.show().setOnDismissListener(this); } - + + /** + * 对话框按钮点击事件处理。 + * @param dialog 对话框对象。 + * @param which 被点击的按钮。 + */ + @Override public void onClick(DialogInterface dialog, int which) { 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为键 startActivity(intent); - //开始动作 break; default: - //这是确定操作 + // 确定操作,不做任何处理 break; } } - + + /** + * 对话框关闭事件处理。 + * @param dialog 对话框对象。 + */ + @Override public void onDismiss(DialogInterface dialog) { - //忽略 stopAlarmSound(); - //停止闹钟声音 finish(); - //完成该动作 } - + + /** + * 停止闹钟声音。 + */ private void stopAlarmSound() { if (mPlayer != null) { mPlayer.stop(); - //停止播放 mPlayer.release(); - //释放MediaPlayer对象 mPlayer = null; } } -} \ No newline at end of file +}