android - 屏幕关闭(手机锁定)时,MediaPlayer(或铃声)不会开始播放

标签 android android-mediaplayer alarmmanager android-alarms android-doze

我正在创建一个提醒应用程序(它就像一个闹钟),您可以在其中设置任务。

接收先前设置的警报 Intent 的代码(使用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();
}

问题是,音乐(从铃声或媒体播放器开始)在手机打开时(在主屏幕或应用程序中)播放,但在手机从 sleep 状态唤醒时不播放。只有声音是问题,其他一切都很好。

我在互联网上做了一些研究,我想这与Doze模式有关(也许不是,因为我认为当 Activity 开始时手机不再处于Doze模式),尝试了一些解决方案但没有任何效果。

API 级别信息:

  • 应用的最低 SDK 级别:23
  • Lenovo P2 级别:24(测试设备)
  • 三星 A40 级别:28(测试设备)

我应该用其他方式做什么?谢谢。

最佳答案

我知道问题出在哪里了。我在 onPause 中停止 MediaPlayer,并在 Activity 可见之前调用它(我不知道为什么)。

2019-10-19 02:38:00.365 LOG:onReceive
2019-10-19 02:38:00.428 LOG:onCreate
2019-10-19 02:38:00.529 LOG:onResume
2019-10-19 02:38:00.542 LOG:onPause
2019-10-19 02:38:00.592 LOG:onStop
2019-10-19 02:38:00.716 LOG:onResume

关于android - 屏幕关闭(手机锁定)时,MediaPlayer(或铃声)不会开始播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402648/

相关文章:

java - Android 中的文件/图片上传

java.lang.RuntimeException : Layout cannot be null. 调用 setLayout

android 到 appEngine 图片内容类型

android java.lang.IllegalStateException MediaPlayer.isPlaying

android - 工作重复 alarmmanager 不起作用,接收器不启动

java - Android Things 包 - UnsatisfiedLinkError

android - 使用 Android mediaPlayer 播放原始文件夹中的文件,使用其 resourceId

java - 如何使用 MediaPlayer 获取流媒体比特率?

java - 特定对象的时间 日期

android - 如何完全关闭 Activity 以便我可以阻止用户启动 Activity