EACCES (В доступе отказано) даже после разрешения - PullRequest
0 голосов
/ 14 июня 2019

У меня есть Android-приложение с таргетингом на SDK 28, поэтому у меня есть разрешения для работы.Я проверяю, установлен ли READ_EXTERNAL_STORAGE, но когда Exoplayer пытается прочитать файл (который, как я убедился, существует), я вижу

com.google.android.exoplayer2.upstream.FileDataSource $ FileDataSourceException:java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/VID_20190610_200249.mp4: открытие не удалось: EACCES (разрешение запрещено).

Я могу воспроизвести актив (файл, запеченный в приложении) просто отлично, как и игра из интернета.Я просто не могу воспроизвести локальное видео, хранящееся в моей ... директории DCIM / Camera по какой-то причине.Может кто-нибудь сказать мне, что я делаю не так, пожалуйста?Мой код выглядит так:

player = ExoPlayerFactory.newSimpleInstance(this, DefaultTrackSelector())
    playerView.player = player
    player?.addListener(this)

    //TODO: Change this when we are given the embedded video
    val dataSource = DefaultDataSourceFactory(this, Util.getUserAgent(this, "Exoplayer"))
    var path: String = ""
    var mediaSource: ExtractorMediaSource

    if (passedUrl == PLAY_TUTORIAL) {
        path = "asset:///tutorial_video.mp4"
        mediaSource = ExtractorMediaSource.Factory(dataSource).createMediaSource(Uri.parse(path))
    } else {
        path = passedUrl

        val file = File(path)
        val uriPath = Uri.fromFile(file)

        Timber.d("Path is $uriPath and that file exists = ${file.exists()}")


        mediaSource = ExtractorMediaSource.Factory(dataSource).createMediaSource(uriPath)
    }

    //Setting this to 0 will keep the controls from being hidden otherwise it's in milliseconds
    playerView.controllerShowTimeoutMs = 1500

    player?.prepare(mediaSource)

Когда я запускаю код, я вижу это в журналах:

2019-06-13 21:54:35.048 5774-5774/com.android.myapp D/ViewTutorialActivity: Path is file:///storage/emulated/0/DCIM/Camera/VID_20190610_200249.mp4 and that file exists = true

2019-06-13 21:54:35.076 5774-5846/com.android.myapp D/OpenGLRenderer: Setting buffer count to 3, min_undequeued 1, extraBuffers 0

2019-06-13 21:54:38.077 5774-5968/com.android.myapp E/ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.upstream.FileDataSource$FileDataSourceException: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/VID_20190610_200249.mp4: open failed: EACCES (Permission denied)
    at com.google.android.exoplayer2.upstream.FileDataSource.open(FileDataSource.java:73)

Есть идеи?

1 Ответ

0 голосов
/ 18 июня 2019

ОК, это Android Q. Существует обходной путь, включающий устаревшую поддержку. Тот же код отлично работает в предыдущих версиях Android.

...