如何在 Xamarin 中获取媒体文件的专辑封面?
How to get the album art of a media file in Xamarin?
我已经搜索了几天如何从文件路径获取歌曲的专辑封面(或视频的帧捕获)。我只能找到与 Mediastore
相关的内容,例如 answer,它需要获取文件的专辑 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);
}
我已经搜索了几天如何从文件路径获取歌曲的专辑封面(或视频的帧捕获)。我只能找到与 Mediastore
相关的内容,例如 answer,它需要获取文件的专辑 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);
}