与CursorLoader专辑的歌曲查询专辑、歌曲、CursorLoader

2023-09-13 23:46:25 作者:别涉世太深

我想通过查询 MediaStore CursorLoader

我怎样才能做到这一点?我可以得到该设备的所有歌曲与此code:

 静态最终的String [] TRACK_SUMMARY_PROJECTION = {MediaStore.Audio.Media._ID,MediaStore.Audio.Media.TITLE};

公共装载机<光标> onCreateLoader(INT ID,捆绑参数){
    字符串排序顺序= MediaStore.Audio.Media.TITLE +ASC;
    串选择= NULL;
    返回新CursorLoader(getActivity(),MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    TRACK_SUMMARY_PROJECTION,选择,空,
                    排序);
}
 

我应该加入到code或修改过滤特定专辑的歌曲?

一步解决方案

走一步看

第1步看的相册,你的手机装载的名字

要索取光标专辑信息

 的String []列= {android.provider.MediaStore.Audio.Albums._ID,
        android.provider.MediaStore.Audio.Albums.ALBUM};

光标= managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
        列,NULL,NULL,NULL);
 
Android之cursorLoader进行数据异步加载

第2步一旦你找到所有专辑names.You可以把它写下来所需的专辑名称和查询歌曲

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

 的String []列= {MediaStore.Audio.Media.DATA,
          MediaStore.Audio.Media._ID,
          MediaStore.Audio.Media.TITLE,
          MediaStore.Audio.Media.DISPLAY_NAME,
          MediaStore.Audio.Media.MIME_TYPE,};

      字符串,其中= android.provider.MediaStore.Audio.Media.ALBUM
          +=?;

      字符串whereVal [] = {专辑的名字从你想要的歌曲};

      串排序依据= android.provider.MediaStore.Audio.Media.TITLE;

      光标= managedQuery(
          MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,列,
          在这里,whereVal,排序依据);
 

现在返回此光标。

有关您参考以下的来源$ C ​​$ C,以重新获得其专辑名称和所有歌曲。

 包org.vipul;

进口android.app.Activity;
进口android.database.Cursor;
进口android.os.Bundle;
进口android.provider.MediaStore;
进口android.util.Log;

公共类HelloActivity延伸活动{
    / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);

        的String []列= {android.provider.MediaStore.Audio.Albums._ID,
                android.provider.MediaStore.Audio.Albums.ALBUM};

        光标光标= managedQuery(
                MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,列,空,
                NULL,NULL);

        如果(cursor.moveToFirst()){
            做 {
                Log.v(VIPUL
                        cursor.getString(光标
                                .getColumnIndex(android.provider.MediaStore.Audio.Albums.ALBUM)));
            }而(cursor.moveToNext());
        }

        //我想在这张专辑卷烟纸列出上下曲(豪华版)

        字符串[]列= {MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media._ID,MediaStore.Audio.Media.TITLE,
                MediaStore.Audio.Media.DISPLAY_NAME,
                MediaStore.Audio.Media.MIME_TYPE,};

        字符串,其中= android.provider.MediaStore.Audio.Media.ALBUM +=;

        字符串whereVal [] = {卷烟纸(豪华版)};

        串排序依据= android.provider.MediaStore.Audio.Media.TITLE;

        光标= managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                列,其中,whereVal,排序依据);

        如果(cursor.moveToFirst()){
            做 {
                Log.v(VIPUL
                        cursor.getString(光标
                                .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)));
            }而(cursor.moveToNext());
        }

    }
}
 

I'd like to get the list of songs of an album by querying the MediaStore with CursorLoader

How can i do this ? I can get all the songs of the device with this code :

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);  
}  

What should I add to the code or modification to filter songs of a particular Album ?

解决方案

Go step by step

Step 1 Look the names of albums loaded on you phone

To request cursor for Album information

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);

Step 2 Once you find all album names.You can write down the desired album name and query songs from it

To request cursor containing song information for particular album

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);

Now return this cursor.

For your reference below is Source code to retrieve Album name and all songs in it.

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());
        }

    }
}

 
精彩推荐