Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用exoplayer播放getExternalFilesDir mp3_Android_Exoplayer - Fatal编程技术网

Android 使用exoplayer播放getExternalFilesDir mp3

Android 使用exoplayer播放getExternalFilesDir mp3,android,exoplayer,Android,Exoplayer,我对exoplayer还比较陌生,在android中通过外部文件目录播放音频文件(特别是mp3)时遇到一些困难 val trackSelector = DefaultTrackSelector(this) trackSelector.setParameters( trackSelector.buildUponParameters().setMaxVideoSizeSd() ) val player : Sim

我对exoplayer还比较陌生,在android中通过外部文件目录播放音频文件(特别是mp3)时遇到一些困难

        val trackSelector = DefaultTrackSelector(this)
        trackSelector.setParameters(
            trackSelector.buildUponParameters().setMaxVideoSizeSd()
        )
        val player : SimpleExoPlayer = SimpleExoPlayer.Builder(this).setTrackSelector(trackSelector).build()


        videoView.player = player
        // Create a data source factory.
        val dataSourceFactory: DataSource.Factory = DefaultDataSourceFactory(this)
        // Create a progressive media source pointing to a stream uri.
        val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
            .createMediaSource(MediaItem.fromUri(Uri.fromFile(getExternalFilesDir("app_tracks/helloaudio.mp3"))))

        player.setMediaSource(mediaSource)
        player.playWhenReady = true
        player.seekTo(0, 0)
        player.prepare()
它给了我一个错误源错误

E/ExoPlayerImplInternal: Playback error
      com.google.android.exoplayer2.ExoPlaybackException: Source error
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:554)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:214)
        at android.os.HandlerThread.run(HandlerThread.java:67)
     Caused by: com.google.android.exoplayer2.upstream.FileDataSource$FileDataSourceException: com.google.android.exoplayer2.upstream.FileDataSource$FileDataSourceException: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.company.app.android/files/app_tracks/helloaudio.mp3: open failed: EISDIR (Is a directory)
        at com.google.android.exoplayer2.upstream.FileDataSource.open(FileDataSource.java:97)
        at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:193)
        at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84)
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1013)
        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:415)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: com.google.android.exoplayer2.upstream.FileDataSource$FileDataSourceException: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.mindfi.app2.android/files/app_tracks/helloaudio.mp3: open failed: EISDIR (Is a directory)
我使用isExist方法检查音频文件是否存在,它会返回true


非常感谢您的帮助。

什么是android版本?“getting file not found exception<看起来您试图以错误的方式获取文件,或者该文件不存在。”。如果您使用的是android 8+,那么您应该使用FileProvider来获取Uri,而不是Uri.fromFile() 代码示例:

final Uri uri = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) ?
                FileProvider.getUriForFile(context, packageName + ".provider", file) : Uri.fromFile(file);
在舱单中:

 <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.yourpackage.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

xml/文件路径(在res文件夹中):



我正在使用android 8+。啊,我明白了,你有例子吗?非常感谢。我在编辑后的回答中提供了一些代码。谢谢!我会试试让你知道!谢谢你,亚历克斯。我对getExternalFilesDir方法感到困惑。这种方法只是获取目录文件夹,而我从一开始就做错了。您的答案是从外部存储器获取文件的正确方法。再次感谢!
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="external_files" path="." />
</paths>