我正在尝试从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);
}
}
我也尝试使用光标来获取专辑封面,但它不起作用。
答案 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;