Как получить обложку альбома медиафайла в Xamarin? - PullRequest
0 голосов
/ 07 апреля 2020

Я пару дней искал, как получить обложку альбома для песни (или захвата кадра видео) из пути к файлу. Все, что я мог найти, это вещи, связанные с Mediastore, например, ответ , где требуется получить идентификатор альбома файла.

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 или как я могу получить идентификатор альбома медиа или что-то еще ... В настоящее время я получаю медиа информацию, используя MediaMetadataRetriever, но я не могу найти способ получить обложку альбома или миниатюра видеофайла с его использованием ...

** Обновление: -

Если для получения медиа-файлов в первом случае необходимо использовать Mediastore поместите перед использованием его для получения своих данных, я могу реализовать его вместо того, что я сейчас делаю (в настоящее время я перебираю файлы устройств для получения поддерживаемых файлов), и это может быть лучшим вариантом, так как Mediastore поддерживает получение данных из внешних источников. хранилища.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 08 апреля 2020

Если вы используете 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);
}
...