Медиаплеер Android останавливается после 1 минуты воспроизведения в фоновом режиме

#java #android #android-studio #android-service #android-mediaplayer

Вопрос:

Я воспроизводю аудиопоток из медиаплеера с помощью сервиса, но он перестает воспроизводить песню примерно через минуту после того, как находится в фоновом режиме или экран выключен. В то время как, с другой стороны, он отлично работает и завершает песню, когда приложение остается открытым.

 public class MyService extends Service implements MediaPlayer.OnPreparedListener {
    MediaPlayer mediaPlayer = null;
    String audio_stream;
    Context context;

    public int onStartCommand(Intent intent, int flags, int startId) {
        audio_stream = intent.getStringExtra("url");
        mediaPlayer = new MediaPlayer();

        try {
            mediaPlayer.setDataSource(audio_stream);
        } catch (IOException e) {
            //e.printStackTrace();
        }
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(this);

        mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {

                return false;
            }
        });
        return START_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }



    @Override
    public void onPrepared(MediaPlayer mp) {
        Log.d("Channel", audio_stream "he");
        mp.start();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mediaPlayer != null) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        }else{
            Log.d("channel", "this is the case");
        }

    }




    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mediaPlayer.release();
    }
}
 

Прежде чем MediaPlayer остановится, он выдаст в журнале 4 строки, которые

 V/MediaPlayer: resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer: cleanDrmObj: mDrmObj=null mDrmSessionId=null
V/MediaPlayer: resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
V/MediaPlayer: cleanDrmObj: mDrmObj=null mDrmSessionId=null
 

Я не могу понять, в чем именно заключается проблема и как я могу ее преодолеть.
Спасибо

Ответ №1:

На устройствах Android 8.0 и выше вам необходимо, чтобы это была служба переднего плана с соответствующим Notification . В противном случае ваша служба будет остановлена через минуту.