Android 如何使用MediaStoreAPI检索歌曲并播放?此外,获取封面艺术,如果可能,读取其输入流?
我得到了一个异常,FileNotFoundExceptionAndroid 如何使用MediaStoreAPI检索歌曲并播放?此外,获取封面艺术,如果可能,读取其输入流?,android,kotlin,filenotfoundexception,mediastore,Android,Kotlin,Filenotfoundexception,Mediastore,我得到了一个异常,FileNotFoundException val resolver: ContentResolver = onContextRequest!!.onRequest().contentResolver val mode = "rw" try { val uri = Uri.parse(Stem.get().loadedTrack.data!!.uri)
val resolver: ContentResolver = onContextRequest!!.onRequest().contentResolver
val mode = "rw"
try {
val uri = Uri.parse(Stem.get().loadedTrack.data!!.uri)
uri.toast(onContextRequest!!.onRequest())
resolver.openFileDescriptor(uri, mode).use {
player!!.setDataSource(it!!.fileDescriptor)
}
} catch (e: IOException) {
e.printStackTrace()
"ERROR $e".longToast(onContextRequest!!.onRequest())
}
错误java.io.FileNotFoundException:无内容提供程序:/internal/audio/
在我可以将数据源设置为文件路径之前,它工作得很好,但这种方法不是最有效的
在android的官方文档中,它说明了如何做到这一点。这就是我正在做的
这些是我声明的所有权限(是的,它们在运行时被授予)
我看不出什么是
外部内容\u URI
。如果您使用的是安卓Q,那么请使用
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
然后构建文件的ContentUri
like
Uri mediaUri = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
使用此uri启动MediaMetaRetriever以获取albumart
contentUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, _id);
你可以像这样玩这个uri
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
byte[] img = mmr.getEmbeddedPicture();
希望有帮助。
不要忘记设置运行权限
GGK我没有使用Android Q:'(这是我使用ContentURI.withAppendedId(EXTERNA\u CONTENT\u URI,\u id)时得到的URI)位置URI路径->/external/audio/media/60036这与我用于媒体播放器的路径相同。如果您找不到该文件,则该文件在该位置不存在,或者您没有读取权限。请检查此项。
contentUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, _id);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
byte[] img = mmr.getEmbeddedPicture();
mMediaplayer.setDataSource(mContext, uri);