|
|
|
@ -83,42 +83,61 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检查屏幕是否处于亮屏状态
|
|
|
|
|
* @return true 表示屏幕亮着,false 表示屏幕关闭
|
|
|
|
|
*/
|
|
|
|
|
private boolean isScreenOn() {
|
|
|
|
|
// 获取电源管理服务
|
|
|
|
|
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
|
|
|
|
// 返回当前屏幕状态
|
|
|
|
|
return pm.isScreenOn();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 播放闹铃声音
|
|
|
|
|
* 注意:需要确保mPlayer已经初始化并且有适当的权限
|
|
|
|
|
*/
|
|
|
|
|
private void playAlarmSound() {
|
|
|
|
|
// 获取系统默认的闹铃铃声URI
|
|
|
|
|
Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM);
|
|
|
|
|
|
|
|
|
|
// 获取静音模式影响的音频流设置
|
|
|
|
|
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);
|
|
|
|
|
// 准备播放器
|
|
|
|
|
mPlayer.prepare();
|
|
|
|
|
// 设置循环播放
|
|
|
|
|
mPlayer.setLooping(true);
|
|
|
|
|
// 开始播放
|
|
|
|
|
mPlayer.start();
|
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
|
// 处理非法参数异常(如无效的URI)
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
} 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
|
|
|
|
|
// 处理IO异常(如无法读取音频文件)
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void showActionDialog() {
|
|
|
|
|
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
|
|
|
|
|
dialog.setTitle(R.string.app_name);
|
|
|
|
|