【发布时间】:2019-10-15 21:06:55
【问题描述】:
我正在创建一个提醒应用程序(它就像一个闹钟),您可以在其中设置任务。
接收之前设置的报警意图的代码(带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();
}
问题是当手机开机时(在主屏幕或应用程序中)播放音乐(以铃声或媒体播放器开头),但当手机从睡眠中唤醒时不播放。只有声音是问题,其他一切都很好。
我在互联网上做了一些研究,我想这与打盹模式有关(可能不是,因为我认为当活动开始时手机不再处于打盹模式),尝试了一些解决方案但没有任何效果。
API 级别信息:
- App 的最低 SDK 级别:23
- Lenovo P2 的等级:24(测试设备)
- 三星A40等级:28(测试设备)
我应该以其他方式做什么?谢谢。
【问题讨论】:
-
你试过用铃声触发通知吗?
-
不,它有一个专门的活动,有解雇和打盹的可能性。也不需要通知。
标签: android android-mediaplayer alarmmanager android-alarms android-doze