如何将MediaMetadataRetriever SetDataSource用于外部存储中的文件

我正在尝试从MP3文件中提取专辑封面但是我无法给出合适的歌曲位置,我可以将其赋予SetDataSource方法。 我尝试了一切,但它仍然给我错误IllegalArgumentException

这一切都发生在这行metaRetriver.setDataSource(MainActivity.this, Uri.parse("/sdcard/song.mp3")); 被执行

我的代码。

 public class MainActivity extends AppCompatActivity { MediaMetadataRetriever metaRetriver; byte[] art; ImageView album_art; Bitmap songImage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getInit(); metaRetriver = new MediaMetadataRetriever(); metaRetriver.setDataSource(MainActivity.this, Uri.parse("/sdcard/song.mp3")); art = metaRetriver.getEmbeddedPicture(); if (art != null) { songImage = BitmapFactory .decodeByteArray(art, 0, art.length); album_art.setImageBitmap(songImage); } else { String error = "art is null"; Log.i("lolol", error); } } public void getInit() { album_art = (ImageView) findViewById(R.id.album_art); } } 

有谁能解决这个问题。

来自Android文档 :

如果Uri无效,则抛出IllegalArgumentException

仔细检查song.mp3文件是否在正确的位置,并且应用程序有权查看它。

Interesting Posts