xamarin.android - 如何在 Xamarin 中获取媒体文件的专辑封面?
问题描述
我一直在寻找有关如何从文件路径中获取歌曲(或视频的帧捕获)的专辑封面的几天。我能找到的只是与Mediastore
这个答案相关的东西,它需要获取文件的专辑 ID。
Cursor cursor = getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[] {MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID+ "=?",
new String[] {String.valueOf(albumId)},
null);
if (cursor.moveToFirst()) {
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
// do whatever you need to do
}
但我找不到关于它如何工作的指南,如何将文件传递给 Mediastore 或如何获取媒体的专辑 ID 或任何东西......目前我正在使用MediaMetadataRetriever
但我找不到媒体信息使用它获取媒体文件的专辑封面或视频缩略图的方法...
**更新:-
如果Mediastore
必须首先使用它来获取媒体文件,然后再使用它来获取它们的数据,我可以实现它而不是我目前正在做的事情(目前我迭代设备文件以获取支持的文件)并且它可以是更好的选择,因为Mediastore
它还支持从外部存储中获取数据。
任何帮助表示赞赏。
解决方案
如果使用MediaMetadataRetriever,您可以尝试使用以下示例代码:
private void loadingCover(string mediaUri)
{
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.SetDataSource(mediaUri);
byte[] picture = mediaMetadataRetriever.GetEmbeddedPicture();
Android.Graphics.Bitmap bitmap = BitmapFactory.DecodeByteArray(picture, 0, picture.Length);
musicCover.SetImageBitmap(bitmap);
}
另外,不要忘记添加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
调用它如下:
File file = new File("/storage/sdcard/Movies/music1.mp4");
if (file.Exists())
{
loadingCover(file.AbsolutePath);
}
推荐阅读
- alibaba-cloud - 尝试使用 Internet 端点访问存储在阿里云 OSS 中的文件时,会抛出错误
- post - 如何在控制器中检索 POST 数据
- javascript - 重试请求,直到结果返回值
- java - Spring MVC 如何判断 homecontroller 和 jsp 之间的冲突?
- excel - 当我在工作表中使用此自定义函数 (MultiplyBigNumbers) 时出现错误。代码或语法有问题吗?
- android - 卡片视图中列表视图的高度在滚动后发生变化
- soapui - 如何在设置脚本中运行多个 json 请求?
- css - div中的背景图片不显示
- python - 在python中将非平凡的字符串输入转换为整数元组
- python - 如何在大字节类型文件上并行迭代?