当屏幕关闭(电话锁定)时,MediaPlayer(或铃声)未开始播放

问题描述 投票:0回答:2

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

用于接收先前设置的警报意图的代码(带有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级别信息:

  • App的最低SDK级别:23
  • 联想P2的等级:24(测试设备)
  • 三星A40的级别:28(测试设备)
  • 我应该以其他方式做什么?谢谢。

我正在创建一个提醒应用程序(就像一个闹钟),您可以在其中设置任务。接收先前设置的警报意图的代码(使用setExactAndAllowWhileIdle):@Override public void ...

android android-mediaplayer alarmmanager android-alarms android-doze
2个回答
0
投票

我认为您可以通过在接收器中实现WakeLock来解决问题,在触发警报之前先获取它,然后在用户停止警报声音后释放它。看一下:https://stackoverflow.com/a/27287511/8513494,以了解如何实现在屏幕上打开的WakeLock。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.