Проблема с переходом к следующему треку

Делаю музыкальный проигрыватель, и возникла проблема при переходе к следующей песне. Когда телефон в рабочем состояние (экран включен) треки плавно переключается, когда экран выключен происходит длительная пауза, песня запускается только через длительное время (очень долго!!!) либо при включении экрана. Также все работает хорошо при гарнитуре (блютуз), песни переключаются плавно даже при выключенном экране. Я использую mediaPlayer.prepare для подготовки трека (музыкальные файлы берутся с SD карты, так уж смысла использовать mediaPlayer.prepareAsync() не вижу). Композиции проигрываются при помощи Service. Так как плеер работает нормально при включенном экране и плохо при выключенном значит проблема в этом. Перепробовала все, облазила все статьи про mediaplayer на русском и английском, пересмотрела ютуб. Помощь принимается и на Kotlin. (Вот здесь такая же проблема, но ответа нет, https://stackoverflow.com/questions/12329601/how-to-use-wake-lock-for-android-mediaplayer) Ниже код:

public class MusicService extends Service implements MediaPlayer.OnCompletionListener,
        MediaPlayer.OnPreparedListener {

    IBinder mBinder = new MyBinder();
    private MediaPlayer mediaPlayer = null;
    private Uri uri;
    private int position = POSITION_PLAY;
    public static AudioManager audioManager;
    int result;
    private NotificationReceiver notificationReceiver;

    @Override
    public void onCreate() {
        super.onCreate();

        notificationReceiver = new NotificationReceiver();
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
                AudioManager.AUDIOFOCUS_GAIN);
        if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED)
            return;

        IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
        registerReceiver(notificationReceiver, intentFilter);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        releaseMP();
        unregisterReceiver(notificationReceiver);
        audioManager.abandonAudioFocus(this);
        Log.e(TAG, "onDestroy()");
    }

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

    public class MyBinder extends Binder {
        MusicService getService() {
            return MusicService.this;
        }

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if(myPosition != -1){
            playMedia(myPosition);
        }
        return START_STICKY;
    }

    public void createMediaPlayer(int positionInner) {
        position = positionInner;
        uri = Uri.parse(musicFiles.get(position).getPath());
        mediaPlayer = null;
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mediaPlayer.setDataSource(getApplicationContext(), uri);
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        prepare();
    }

    private void playMedia(int position) {
        if(mediaPlayer != null) {
            mediaPlayer.stop();
            releaseMP();
        }
        createMediaPlayer(position);
        mediaPlayer.start();
    }

    public void prepare() {
        try {
            mediaPlayer.prepare();
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
    }

    void showNotification(int playPauseBtn){
        ...
        startForeground(2, notification);
        if(!isGoing && IS_LIVE) {
            stopForeground(false);
        }
    }


    void OnCompleted(){
        mediaPlayer.setOnCompletionListener(this);
    }

    void OnPrepared() { mediaPlayer.setOnPreparedListener(this);}

    @Override
    public void onCompletion(MediaPlayer mp) {
        if(actionPlaying != null){
            actionPlaying.nextBtnClicked();
            if(mediaPlayer != null){
                mediaPlayer.start();
                OnCompleted();
            }
        }
    }

    private void releaseMP() {
        if (mediaPlayer != null) {
            try {
                mediaPlayer.release();
                mediaPlayer = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

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

}

В manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.music">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:name=".ApplicationClass"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Music">

        <activity android:name=".MusicActivity"
            android:screenOrientation="portrait"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        ...
        <service android:name=".MusicService" android:enabled="true"/>
        <receiver android:name=".NotificationReceiver" android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON" />
                <action android:name="android.media.AUDIO_BECOMING_NOISY" />
                <action android:name="actionprevious" />
                <action android:name="actionnext" />
                <action android:name="actionplay" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

Ответы (1 шт):

Автор решения: Alex Goodman

Нашла проблему. Нужно было вызвать mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

→ Ссылка