我正在使用 CursorLoder 类从 android 的媒体内容提供程序获取流派列表。
下面是我的光标查询来获取流派列表。
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// currently filtering.
Uri baseUri;
baseUri = MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI;
String[] STAR = { "*" };
return new CursorLoader(getActivity(), baseUri, STAR, null, null, null );
}
现在,我从媒体内容提供商处获得了所有流派列表,但我获得的数据存在问题。我还得到了之前创建的流派名称,但现在我没有歌曲。
我只想要其中包含歌曲的流派,而不是其中没有歌曲的流派名称。
有人能帮我吗?
UPDATE
我可以使用下面的代码获取所有流派及其歌曲...
private void getGenresList() {
//-------------------------------------
int index;
long genreId;
int count;
Uri uri;
Cursor genrecursor;
Cursor tempcursor;
String[] proj1 = {MediaStore.Audio.Genres.NAME, MediaStore.Audio.Genres._ID};
String[] proj2={MediaStore.Audio.Media.DISPLAY_NAME};
genrecursor=getActivity().getContentResolver().query(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI,proj1,null, null, null);
if(genrecursor.moveToFirst())
{
do{
index = genrecursor.getColumnIndexOrThrow(MediaStore.Audio.Genres.NAME);
System.out.println("GENRE NAME: "+genrecursor.getString(index));
System.out.println("======================================");
index = genrecursor.getColumnIndexOrThrow(MediaStore.Audio.Genres._ID);
genreId=Long.parseLong(genrecursor.getString(index));
uri = MediaStore.Audio.Genres.Members.getContentUri("external", genreId);
tempcursor = getActivity().getContentResolver().query(uri, proj2, null,null,null);
System.out.println("Total Songs: "+tempcursor.getCount());
if(tempcursor.moveToFirst())
{
do{
index=tempcursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
System.out.println(" Song Name: "+tempcursor.getString(index));
}while(tempcursor.moveToNext());
}
System.out.println("======================================");
}while(genrecursor.moveToNext());
}
//-------------------------------------
}
但是,我必须使用两个查询,一个用于获取所有流派,第二个用于过滤包含歌曲的流派的数据。即使我想在 CursorLoader 中使用它,所以我想知道如何做到这一点。
希望您对这个问题有正确的了解我想要什么。