Правильный способ обработки воспроизведения mp3 во внешнем хранилище - PullRequest
0 голосов
/ 09 октября 2019

Попытка воспроизвести mp3 во внешнем хранилище эмулятора (но не на SD-карте). После некоторого поиска в Google я подумал, что у меня есть код, который будет работать, а также добавил следующие строки в файл AndroidManifest.xml моего приложения:

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

Это все еще не удается, и я нашел сообщения о том, что, по-видимому, мне нужно запросить разрешение какЧто ж. Скопировал в какой-то код, который я обнаружил, который должен был это сделать, но затем я получил сообщение от Android Studio, в котором говорилось, что его использование ограничит уровень API, с которым он будет работать. Тогда я понял, что ушел из глубины того, что является правильным способом для достижения моей цели. Был бы весьма признателен некоторый контекст для определения уровня API или проверки работоспособности моего кода MediaPlayer. Спасибо.

class MainActivity : AppCompatActivity()
{
    private lateinit var mp: MediaPlayer
    private var totalTime: Int = 0

    override fun onCreate( savedInstanceState: Bundle? )
    {
        super.onCreate( savedInstanceState )
        setContentView( R.layout.activity_main )

        // this is the permission code I get the API level warning about
        val MY_READ_EXTERNAL_REQUEST : Int = 1
        if (checkSelfPermission(
                Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), MY_READ_EXTERNAL_REQUEST)
        }

        mp = MediaPlayer()
        // path and name of mp3 file I'm trying to play
        mp.setDataSource( "/storage/emulated/0/Music/Bad Guys Win.mp3" )
        mp.prepare()
        mp.start()
    }
}

Ошибка разрешения:

java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.example.scratch / com.example.scratch.MainActivity}:java.io.FileNotFoundException: / storage / emulated / 0 / Music / Bad Guys Win.mp3: открыть не удалось: EACCES (в доступе отказано)

Снимок экрана предупреждения API от Android Studio

1 Ответ

0 голосов
/ 09 октября 2019

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

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if(grantResults.size > 0 && grantResults.get(0) == PackageManager.PERMISSION_GRANTED){
        // write your media player code here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...