想要从URL获取歌曲的专辑封面,这是我到目前为止的尝试:
SongPath = "www.asd.com/music.mp3";
android.media.MediaMetadataRetriever mmr = new MediaMetadataRetriever();
try{
mmr.setDataSource(SongPath);
}catch(Exception e){}
byte [] data = mmr.getEmbeddedPicture();
if(data != null)
{
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bitmap);
}
else
{
imageView.setImageResource(R.drawable.jak);
}
但是当运行此代码时,得到这个:call to get embedded picture failed
所以我对此进行了研究,有些人通过更改此部分
来解决此问题mmr.setDataSource(SongPath);
对此
mmr.setDataSource(SongPath,new HashMap<String, String>());
我这样做,但是当运行应用程序图像视图时,什么都不显示并得到这个:SkImageDecoder::Factory returned null
注意:我可以使用FFmpegMediaMetadataRetriever
库(就像MediaMetadataRetriever
一样)并工作的唯一方法,但问题是库似乎很慢..它的平均时间需要 4,5 秒来获取图片,当添加此库时,apk 文件从 1.8MB 变为 24MB! 这太庞大了!
所以世界上任何人都知道如何用好的方式做到这一点 - 如果有人可以请帮助
你可以用类似的方式使用Glide,就像在File
使用它一样:bumptech/glide#699,如果你能弄清楚如何远程做到这一点。问题是您仍然需要下载整个.mp3文件,我猜这需要 4-5 秒。我不确定.mp3格式,但我认为专辑封面可能在文件的末尾。出于这个原因,不建议使用这种方法(类似于从 http 加载视频拇指是一个坏主意)。无论如何,如果你想走这条路,那么先在加载上拍一个.diskCacheStrategy(SOURCE)
来保存文件,然后编写一个自定义解码器来使用
最好的方法是,如果您托管mp3,则从单独的文件中提供专辑封面;或者使用公共服务来检索它。查看任何专辑封面下载程序以获取可能的服务。
有一件事是肯定的:没有协议,什么都行不通,根据需要为您的www.
添加http://
或https://
前缀。