【问题标题】:MediaPlayer (or Ringtone) doesn't start playing when the screen is off (phone is locked)屏幕关闭(手机已锁定)时,MediaPlayer(或铃声)不开始播放
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 嗨,即使在移除 onPause 之后,三星设备上仍然无法播放音乐。
【解决方案2】:

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

【讨论】:

  • 按照您的描述尝试过,不幸的是没有任何改变。无论如何,谢谢!
猜你喜欢
  • 2011-11-13
  • 2020-07-13
  • 1970-01-01
  • 2012-10-01
  • 2020-01-31
  • 2019-05-27
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多