【问题标题】:Query songs of an album with CursorLoader使用 CursorLoader 查询专辑的歌曲
【发布时间】:2012-06-19 09:23:51
【问题描述】:

我想通过CursorLoader查询MediaStore获取专辑的歌曲列表

我该怎么做?我可以使用此代码获取设备的所有歌曲:

static final String[] TRACK_SUMMARY_PROJECTION = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE}; 

public Loader<Cursor> onCreateLoader(int id, Bundle args) {  
    String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
    String select = null;  
    return new CursorLoader(getActivity(), MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,  
                    TRACK_SUMMARY_PROJECTION, select, null,  
                    sortOrder);  
}  

我应该在代码中添加什么或修改以过滤特定专辑的歌曲?

【问题讨论】:

    标签: android android-cursor android-cursorloader


    【解决方案1】:

    一步一步来

    第 1 步查看手机上加载的专辑名称

    请求光标获取专辑信息

    String[] columns = { android.provider.MediaStore.Audio.Albums._ID,
            android.provider.MediaStore.Audio.Albums.ALBUM };
    
    cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
            columns, null, null, null);
    

    第2步找到所有专辑名称后。您可以写下所需的专辑名称并从中查询歌曲

    请求包含特定专辑歌曲信息的光标

    String[] columns = { MediaStore.Audio.Media.DATA,
              MediaStore.Audio.Media._ID,
              MediaStore.Audio.Media.TITLE,
              MediaStore.Audio.Media.DISPLAY_NAME,
              MediaStore.Audio.Media.MIME_TYPE, };
    
          String where = android.provider.MediaStore.Audio.Media.ALBUM
              + "=?";
    
          String whereVal[] = { Album name from which you want songs };
    
          String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
    
          cursor = managedQuery(
              MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns,
              where, whereVal, orderBy);
    

    现在返回这个光标。

    下面是检索专辑名称和其中所有歌曲的源代码供您参考。

    package org.vipul;
    
    import android.app.Activity;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.util.Log;
    
    public class HelloActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            String[] columns = { android.provider.MediaStore.Audio.Albums._ID,
                    android.provider.MediaStore.Audio.Albums.ALBUM };
    
            Cursor cursor = managedQuery(
                    MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, columns, null,
                    null, null);
    
            if (cursor.moveToFirst()) {
                do {
                    Log.v("Vipul",
                            cursor.getString(cursor
                                    .getColumnIndex(android.provider.MediaStore.Audio.Albums.ALBUM)));
                } while (cursor.moveToNext());
            }
    
            // I want to list down song in album Rolling Papers (Deluxe Version)
    
            String[] column = { MediaStore.Audio.Media.DATA,
                    MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE,
                    MediaStore.Audio.Media.DISPLAY_NAME,
                    MediaStore.Audio.Media.MIME_TYPE, };
    
            String where = android.provider.MediaStore.Audio.Media.ALBUM + "=?";
    
            String whereVal[] = { "Rolling Papers (Deluxe Version)" };
    
            String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
    
            cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    column, where, whereVal, orderBy);
    
            if (cursor.moveToFirst()) {
                do {
                    Log.v("Vipul",
                            cursor.getString(cursor
                                    .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)));
                } while (cursor.moveToNext());
            }
    
        }
    }
    

    【讨论】:

    • 你好 vipul,这是我一直在寻找的东西,但在任何地方都找不到,经过大量搜索终于得到了一个简洁易懂的代码,我目前正在学习 android,想知道可以我们提取专辑信息,如专辑图片,并使用列表视图显示。所有媒体播放器中的方式,感谢如此出色的代码
    • 这是查询相册及其内容最完整的答案。并且没有明显的方法可以查看 MediaStore.java 中的代码。解决方案并非易事。
    • 我没有匹配专辑名称,而是匹配 ID,如 String where = MediaStore.Audio.Media.ALBUM_ID + "=?";
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多