首页 > 解决方案 > Exoplayer 使用 ContentResolver#openFileDescriptor(Uri, String) 设置 mediaSource,而不是 Uri.parse(MediaStore.Audio.Media.DATA)

问题描述

MediaStore.Audio.Media.DATA由于已弃用,如何在 Android Q 中将 uri 传递给 mediaSource

早些时候(低于 Api 29 / Android 10/ Q)这就是我使用的

mediaSource = new ProgressiveMediaSource. Factory(dataSourceFactory).createMediaSource(Uri.parse(SongsForQueue.get(i)._path)); simpleExoPlayer.prepare(mediaSource); simpleExoPlayer.setPlayWhenReady(true);

MediaStore.Audio.Media.DATA其中 SongsForQueue.get(i)._path 是自 Android Q 弃用 MediaStore.Audio.Media.DATA 以来我们从中获取的文件的路径 我们可以使用什么

安卓建议

https://stackoverflow.com/a/59037794

利用

ContentResolver#openFileDescriptor(Uri,字符串)。

我们怎样才能做到这一点任何帮助都会有用

标签: androidexoplayer

解决方案


我解决了这个问题:

long mediaId = //composition id in media store
Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mediaId);

DataSpec dataSpec = new DataSpec(uri);
ContentDataSource dataSource = new ContentDataSource(context);
dataSource.open(dataSpec);

DataSource.Factory factory = () -> dataSource;
MediaSource mediaSource = new ProgressiveMediaSource.Factory(factory).createMediaSource(uri);
player.prepare(mediaSource);//your player

Exoplayer 版本:2.11.3


推荐阅读