音乐播放器停止

问题描述

我正在使用我自己的音乐播放器应用程序,该应用程序使用带有 android.media.MediaPlayer 和唤醒模式 PARTIAL_WAKE_LOCK前台服务来播放音乐。权限 FOREGROUND_SERVICEWAKE_LOCK 在清单中声明。

多年来,所有这些在我运行 Android 9 (API 28) 的华为设备上运行良好,但在我运行 Android 10 (API 29) 的新三星 galaxy A51 上,音乐在一段时间后停止播放。前几首歌曲很好,但在到达上一首歌曲结束后下一首歌曲不会开始播放(下一首歌曲在MediaPlayer.OnCompletionListener.onCompletion()中开始)。并不是应用程序被杀死了,只要我打开屏幕,下一首歌曲就会开始播放。

我已尝试在 Android 首选项“应用/特殊访问/优化电池使用”中将我的应用列入白名单,并使用 ACTION_REQUEST_IGnorE_BATTERY_OPTIMIZATIONS。我读过有关使用 MediaSession 之类的内容将我的应用注册为音乐播放器的内容,以及其他一些描述类似问题的 StackOverflow 帖子,我尝试了一些解决方案,但没有任何效果。也许有人可以把我送到正确的方向。

编辑:这是从服务启动 MediaPlayer 的方式(缩小版):

@Override
public void onCreate() {
    player = new MediaPlayer();
    player.setWakeMode(getApplicationContext(),PowerManager.PARTIAL_WAKE_LOCK);
    player.setAudioAttributes(new AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .build()
    );
    player.setonPreparedListener(this);
    player.setonCompletionListener(this);
    player.setonErrorListener(this);
}

@Override
public int onStartCommand(Intent intent,int flags,int startId) {
    play();
}

public void play() {
    player.reset();
    player.setDataSource(getApplicationContext(),getSong().getContentUri());
    player.prepareAsync();
}

@Override
public void onPrepared(MediaPlayer player) {
    setVolume();
    player.start();
}

@Override
public void onCompletion(MediaPlayer player) {
    // Go to next song.
    play();
}

解决方法

我认为这是存储权限问题

在 Android Q 中如果您授予权限并且它被授予或不起作用,请转到清单并添加 android:requestLegacyExternalStorage="true"

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:requestLegacyExternalStorage="true" //Add this Line
    android:label="@string/app_name">

---------<Activity,Sevices or Recivers>----------

</application>