0

我正在尝试从 MP3 文件中检索专辑封面,但以下代码不起作用。每当应用程序启动时,它都会显示灰色框(在 try/catch 块中检查代码)。

public class MainActivity extends AppCompatActivity {

    MediaMetadataRetriever metaRetriver;
    byte[] art;
    ImageView album_art;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getInit();

        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

        Cursor cursor = getContentResolver().query(uri, null, null, null, null);


        cursor.moveToFirst();

        String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

        cursor.close();

        metaRetriver = new MediaMetadataRetriever();
        metaRetriver.setDataSource(url);

        try {
            art = metaRetriver.getEmbeddedPicture();

            Bitmap songImage = BitmapFactory
                    .decodeByteArray(art, 0, art.length);

            album_art.setImageBitmap(songImage);

        } catch (Exception e) {
            album_art.setBackgroundColor(Color.GRAY);
        }
    }

    public void getInit() {

        album_art = (ImageView) findViewById(R.id.album_art);

    }

}

我也尝试使用光标来获取专辑封面,但它不起作用。

4

2 回答 2

0

没有专辑封面MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

你需要使用Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;

于 2018-07-14T21:01:23.043 回答
0

你得到NullPointerException

art = metaRetriver.getEmbeddedPicture();

MediaMetadataRetriever 文档]( https://developer.android.com/reference/android/media/MediaMetadataRetriever#getembeddedpicture ):

在 setDataSource() 之后调用此方法。此方法查找与数据源关联的可选图形或专辑/封面艺术。如果有超过一张图片,则返回其中一张。

如果未找到返回的字节数组,null则必须在解码之前检查 null。

于 2018-05-19T14:41:40.303 回答