如何使用MediaMetadataRetriever()从.mp3文件中检索专辑封面

时间:2018-05-19 14:36:31

标签: java android android-mediaplayer mediametadataretriever

我正在尝试从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);

    }

}

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

2 个答案:

答案 0 :(得分:0)

你得到NullPointerException

art = metaRetriver.getEmbeddedPicture();

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

  

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

如果找不到,则返回的字节数组为null,因此您必须在解码前检查是否为空。

答案 1 :(得分:0)

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

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