我正在编写一个警报(有点)应用程序,它使用带有 RTC_WAKEUP 标志的 AlarmManager 注册广播意图,以在指定时间关闭。作品...
当接收到广播时,接收器启动一个活动,使用 STREAM_ALARM 流通过 MediaPlayer 播放铃声,并做一些其他的事情。一切正常,但如果在屏幕关闭时接收到广播,则活动正确启动但不播放铃声。如果在屏幕打开和解锁时收到,则可以正常工作并播放铃声。
编辑在播放铃声的活动中添加代码。
public void onCreate(Bundle bundle) {
super.onCreate(bundle)
...
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
ringtonePlayer = new MediaPlayer();
...
playRingtone();
}
private void playRingtone() throws IllegalArgumentException, SecurityException, IllegalStateException, IOException {
ringtonePlayer.setDataSource(prefs.getString(getRingTone(), RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE).toString()));
ringtonePlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
ringtonePlayer.setWakeMode(this, PowerManager.PARTIAL_WAKE_LOCK);
ringtonePlayer.setLooping(true);
ringtonePlayer.prepare();
ringtonePlayer.start();
Log.i(LOG_TAG, "Ringtone started");
}