Android MediPlayer prepareAsync () java.lang.IllegalStateException

Я работаю с импортом android.media.MediaPlayer и проигрываю mp3-файлы с внешнего хранилища. Пример, который я использую, хорошо работает на Android с версией ниже 10. Когда я пытаюсь воспроизвести файлы с внешнего хранилища на Android 10 (OnePlus 6). Я получаю исключение.

Код из моей службы

       mediaPlayer?.let {
           with(it) {
               setOnCompletionListener(this@MediaPlayerService)
               setOnErrorListener(this@MediaPlayerService)
               setOnPreparedListener(this@MediaPlayerService)
               setOnBufferingUpdateListener(this@MediaPlayerService)
               setOnSeekCompleteListener(this@MediaPlayerService)
               setOnInfoListener(this@MediaPlayerService)
               reset()
               setAudioAttributes(
                   AudioAttributes.Builder()
                       .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
                       .setUsage(AudioAttributes.USAGE_MEDIA)
                       .build()
               )
               try {
                   setDataSource(mediaFile)
               } catch (e: Exception) {
                   println(e.printStackTrace())
                   stopSelf()
               }
               prepareAsync()
           }

Код для получения файлов из хранилища

        val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
        val selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0"
        val sortOrder = MediaStore.Audio.Media.TITLE + " ASC"
        val cursor = contentResolver.query(uri, null, selection, null, sortOrder)
        cursor?.let {
            if (it.count > 0) {
                while (it.moveToNext()) {
                    val data = it.getString(it.getColumnIndex(MediaStore.Audio.Media.DATA))
                    val title = it.getString(it.getColumnIndex(MediaStore.Audio.Media.TITLE))
                    val album = it.getString(it.getColumnIndex(MediaStore.Audio.Media.ALBUM))
                    val artist = it.getString(it.getColumnIndex(MediaStore.Audio.Media.ARTIST))
                    audioList.add(Audio(data, title, album, artist))
                }
            }
        }
        cursor?.close()

Трассировка стека

Process: ru.example.mymediaplayer, PID: 30394
    java.lang.RuntimeException: Unable to start service ru.example.mymediaplayer.MediaPlayerService@fcc80f8 with Intent { cmp=ru.example.mymediaplayer/.MediaPlayerService (has extras) }: java.lang.IllegalStateException
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4222)
        at android.app.ActivityThread.access$2100(ActivityThread.java:231)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1984)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
     Caused by: java.lang.IllegalStateException
        at android.media.MediaPlayer.prepareAsync(Native Method)
        at ru.example.mymediaplayer.MediaPlayerService.initMediaPlayer(MediaPlayerService.kt:198)
        at ru.example.mymediaplayer.MediaPlayerService.onStartCommand(MediaPlayerService.kt:47)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4204)
        at android.app.ActivityThread.access$2100(ActivityThread.java:231) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1984) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7682) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 

person Alex    schedule 16.01.2021    source источник
comment
Проверьте это, stackoverflow.com/questions/23309857/   -  person rahat    schedule 16.01.2021
comment
Спасибо. Дело не в моем вопросе. Потому что все работает на телефонах с Android ниже 10. Я думаю, что это связано с доступом к внешнему хранилищу в Android 10.   -  person Alex    schedule 16.01.2021