我正在创建一个提醒应用程序(就像一个闹钟),您可以在其中设置任务。
用于接收先前设置的警报意图的代码(带有setExactAndAllowWhileIdle):
@Override
public void onReceive(Context context, Intent intent) {
int alarmId = intent.getIntExtra(Constants.REMINDER_ALARM_ID, 0);
Intent goingOffIntent = new Intent(context, GoingOffActivity.class);
goingOffIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
goingOffIntent.putExtra(Constants.REMINDER_ALARM_ID, alarmId);
context.startActivity(goingOffIntent);
}
即使屏幕处于关闭状态(并且键盘锁处于打开状态),此操作仍然有效,GoingOffActivity会显示两个选项:贪睡,关闭。
GoingOffActivity的onCreate:
getWindow().setFlags(
flags: WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
mask: WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
...
// Play ringtone
if (ringingEnabled) {
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
ringtone = RingtoneManager.getRingtone(getApplicationContext(), uri);
ringtone.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
ringtone.play();
//mediaPlayer = MediaPlayer.create(context, uri); //Settings.System.DEFAULT_RINGTONE_URI
//mediaPlayer.setLooping(true);
//mediaPlayer.start();
}
问题在于,当手机处于打开状态(在主屏幕或应用程序中)时,音乐(以Ringtone或MediaPlayer开头)会播放,而当手机从睡眠中唤醒时则不会播放。只有声音才是问题,其他一切都很好。
我在Internet上进行了一些研究,我猜想这与打mode模式有关(也许不是,因为我认为当活动开始时,电话不再处于打mode模式),尝试了一些解决方案,但没有任何效果。< / p>
Api级别信息:
我应该怎么做?谢谢。
答案 0 :(得分:2)
我知道问题出在哪里。我在onPause中停止了MediaPlayer,它在活动可见之前被调用(我不知道为什么)。
classes
答案 1 :(得分:0)
我认为您可以通过在接收器中实现WakeLock来解决问题,在触发警报之前先获取它,然后在用户停止警报声音后释放它。 看一下https://github.com/zeit/next.js/tree/canary/examples/with-sitemap-and-robots-express-server,以了解如何实现在屏幕上打开的WakeLock。