Как получить и отобразить album_art для медиаплеера - PullRequest
1 голос
/ 25 февраля 2011

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

public View getView(int position, View convertView, ViewGroup parent) {
     System.gc();

     View cellLayout = getLayoutInflater().inflate(R.layout.albumbrowsercell, null);
     ImageView album_art = (ImageView) cellLayout.findViewById(R.id.albums_album_cover);
     TextView album_title = (TextView) cellLayout.findViewById(R.id.albums_album_title);
     TextView artist_title = (TextView) cellLayout.findViewById(R.id.albums_artist_title);

     String albumName;
     String artistName;
     int albumID;

     album_column_index = albumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID);
     albumCursor.moveToPosition(position);
     albumID = albumCursor.getInt(album_column_index);
     Uri sArtworkUri = Uri.parse(MediaStore.Audio.Albums.ALBUM_ART);
     Uri uri = ContentUris.withAppendedId(sArtworkUri, albumID);
     album_art.setImageURI(uri);
     //code to do set text above etc.

return cellLayout;

Logcat выдает ошибки, подобные этим: I / System.out (12781): с ошибкой resolUri на неверном растровом изображении uri: album_art / 224 Следовательно, проблема, кажется, с appendedID. Хотя я не знаю, как еще это назвать (я даже прибег к попытке случайных чисел, чтобы посмотреть, смогу ли я набрать одно).

Возможно, я совершаю фундаментальную ошибку. До сих пор я проводил большую часть своего времени, изучая, как работать с контент-провайдерами и т. Д., И я до сих пор не уверен на 50% в них (никогда раньше не занимался базами данных или Android).

Кроме того, это просто я или документация Android, по крайней мере, по этой теме, довольно мусор?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

ALBUM_ART - это имя столбца, а не URI контента.Вам нужно запросить альбом и получить столбец с именем ALBUM_ART.Это, вероятно, даст вам URI для ImageStore (не знаю, я сам не пробовал).

Кстати, открытая ошибка в столбце ABLUM_ART, но я бы посоветовал вампопробуйте сначала - возьмите столбец ALBUM_ART и посмотрите, что там.

Пример кода (обратите внимание, что это не в моей голове, поэтому это может быть неправильно):

Cursor cursor = getContentResolver().query(
              ContentUris.withAppendedId(
                  MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, albumId),
              new String[] { MediaStore.Audio.AlbumColumns.ALBUM_ART },
              null,
              null,
              null);

if (cursor.moveToFirst()) {
    String albumArtUri = cursor.getString(0);
}

cursor.close();

Опять же, нет никаких гарантий, что это работает, я никогда не пользовался хранилищем мультимедиа и написал этот код, не имея возможности его протестировать.

0 голосов
/ 12 марта 2013

это сработало для меня ..

Cursor cursorAlbum = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
                new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART},MediaStore.Audio.Albums._ID+ "=" + album_id, null, null);

        if(cursorAlbum != null  && cursorAlbum.moveToFirst()){

            String uri = cursorAlbum.getString(cursorAlbum.getColumnIndex("album_art"));
            cursorAlbum.close();
            if(uri != null ) 
                {
                    //Log.i("albumUri", uri);
                    wrapper.image.setImageURI(Uri.parse(uri));
                }
            }           
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...