gpt4 book ai didi

android - 我如何从内存中查询歌曲的uri

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:46 26 4
gpt4 key购买 nike

我想访问歌曲的详细信息,包括艺术家专辑durationtitledisplay名称

这可以通过查询 EXTERNAL_CONTENT_URI 以获取外部存储中的文件来完成,但我无法使用 INTERNAL_CONTENT_URI 从内部存储中查询文件。

最近两天我一直坚持这个。这是我的代码:

void loadPlayList(){
ArrayList<Song> list = null;
try{
list = new ArrayList<Song>();
Uri uri;
//if(SplashScreen.getDirPrefs())
uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//else
//Uri uri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;

String[] m_data = {MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.TRACK,MediaStore.Audio.Media.DISPLAY_NAME};
Cursor c = getApplicationContext().getContentResolver().query(uri, m_data, MediaStore.Audio.Media.IS_MUSIC+"=1", null, null);

PlayerManager pm = new PlayerManager();

//Log.e("vmplayer loadPlayList ", "cursor : "+c.getCount());
for(c.moveToFirst();!c.isAfterLast();c.moveToNext())//while(c.moveToNext())
{
String str = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
str = str.substring(0, (str.length() - 4));

for(int i = 0; i < GlobalClass.songList.size(); i++)
{
Song sn = GlobalClass.songList.get(i);
//Log.e("vmplayer loadPlayList ", "str : "+str);
if(sn.name.equalsIgnoreCase(str))
{
sn.title = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
sn.album = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
sn.albumId = c.getLong(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
sn.artist = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
sn.duration = pm.milliSecondsToTimer((long)(c.getInt(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION))));
//Log.e("vmplayer loadPlayList ", "dur : "+sn.duration);
Bitmap art = null;
try{
Uri contentUri = Uri.parse("content://media/external/audio/albumart");
Uri albumUri = ContentUris.withAppendedId(contentUri,c.getLong(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)));

ContentResolver res = getApplicationContext().getContentResolver();
InputStream in = res.openInputStream(albumUri);
art = BitmapFactory.decodeStream(in);
//art = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(),albumUri);
//art = Bitmap.createScaledBitmap(art, 100, 100, true);
}
catch(FileNotFoundException e){
Log.e("vmplayer loadPlayList ", "err1 :"+e);
art = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.artwork);
}
catch(Exception e){
Log.e("vmplayer loadPlayList err2", ""+e);
art = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.artwork);
}

//Log.e("vmplayer loadPlayList art", "bit map : "+art);
sn.coverImg = art;
list.add(sn);
}
}
}

GlobalClass.songList.clear();
GlobalClass.songList = list;
Log.e("loadPlayList", "cont : "+GlobalClass.songList.size());
c.close();
}
catch(Exception e){
Log.e("vmplayer loadPlayList err", ""+e);
}

}

提前致谢..

最佳答案

我认为这是您的 Android 版本引起的。

我写的代码和你的一样。它适用于 Android 5.0.1,但在 Android 2.3.6 上崩溃。我觉得如果你的Android版本太旧,你应该尝试另一种方法在内部存储中查询。

关于android - 我如何从内存中查询歌曲的uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20523534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com