我正在创建一个提醒应用程序(就像一个闹钟,您可以在其中设置任务。
用于接收先前设置的警报意图的代码(带有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模式),尝试了一些解决方案,但没有任何效果。
Api级别信息:
我应该以其他方式做什么?谢谢。
我正在创建一个提醒应用程序(就像一个闹钟),您可以在其中设置任务。接收先前设置的警报意图的代码(使用setExactAndAllowWhileIdle):@Override public void ...
我认为您可以通过在接收器中实现WakeLock来解决问题,在触发警报之前先获取它,然后在用户停止警报声音后释放它。看一下:https://stackoverflow.com/a/27287511/8513494,以了解如何实现在屏幕上打开的WakeLock。
我知道问题出在哪里。我在onPause中停止了MediaPlayer,它在活动可见之前被调用(我不知道为什么)。