это.

ите внимание, что я уже проходил подобные вопросы и ответы на них здесь и на других сайтах. У меня также есть решение, которое работает на некоторых устройствах (мой G2X работает под управлением CyanogenMod 7.1, HD2 моей жены работает под заказным ПЗУ и эмулятор под управлением Android 2.1). Однако это не работает на моем Nook, работающем с CyanogenMod.

Мой вопрос: какой самый надежный и общий способ загрузки обложек альбомов на всех устройствах Android? Каковы недостатки для конкретных устройств, версий или музыкальных приложений (я не имею в виду сторонние плееры, я имею в виду Google Music по сравнению со старым клиентом Music)? Мой текущий код:

// Is this what's making my code fail on other devices?
public final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");

// This works, and well on all devices
private int[] getAlbumIds(ContentResolver contentResolver)
{
    List<Integer> result = new ArrayList<Integer>();
    Cursor cursor = contentResolver.query(MediaStore.Audio.Media.getContentUri("external"), new String[]{MediaStore.Audio.Media.ALBUM_ID}, null, null, null);

    if (cursor.moveToFirst())
    {
        do{
            int albumId = cursor.getInt(0);
            if (!result.contains(albumId))
                result.add(albumId);
        } while (cursor.moveToNext());
    }

    int[] resultArray = new int[result.size()];
    for (int i = 0; i < result.size(); i++)
        resultArray[i] = result.get(i);

    return resultArray;
}

// This is the bit I want to make more robust, make sure that it works on all devices
private Shader getAlbumArt(ContentResolver contentResolver, int albumId, int width, int height)
{
    Uri uri = ContentUris.withAppendedId(sArtworkUri, albumId);
    InputStream input = null;
    try {
        input = contentResolver.openInputStream(uri);
        if (input == null)
            return null;

        Bitmap artwork = BitmapFactory.decodeStream(input);
        input.close();
        if (artwork == null)
            return null;

        Bitmap scaled = Bitmap.createScaledBitmap(artwork, width, height, true);
        if (scaled == null)
            return null;

        if (scaled != artwork)
            artwork.recycle();
        artwork = scaled;

        return new BitmapShader(artwork, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

Заранее спасибо Ananth

Ответы на вопрос(4)

Ваш ответ на вопрос