android - 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,字符串)。
我们怎样才能做到这一点任何帮助都会有用
解决方案
我解决了这个问题:
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
推荐阅读
- ios - 如何修复此无效更新:第 0 节错误中的无效行数?
- c# - FTP下载慢
- python - Python:我们真的需要装饰器的包装器吗?(重访)
- intellij-idea - 如何在 IntelliJ IDEA 中为 rust 项目指定 LD_LIBRARY_PATH?
- python - 有条件地用另一个类方法装饰类方法
- django - 通过 parsepy 查询 mogodb 时使用 __startswith(或类似类型)返回空查询集
- sparql - 带有语言过滤器的 SPARQL 查询模板
- .net - MessageBox 仅在表单关闭后显示
- cordova - Apache Cordova `resolveLocalFileSystemURL` 函数总是返回错误 5 (ENCODING_ERR)
- android-studio - “您需要为您的 APK 或 Android App Bundle 使用不同的版本代码”无论设置什么版本代码