Вопрос по android-cursor, android, android-cursorloader – Запрос песни альбома с CursorLoader

6

Я хотел бы получить список песен альбома, запросивMediaStore сCursorLoader

Как я могу это сделать ? Я могу получить все песни устройства с этим кодом:

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

Что я должен добавить к коду или модификации, чтобы отфильтровать песни определенного альбома?

Ваш Ответ

1   ответ
20

Иди шаг за шагом

Step 1 Look the names of albums loaded on you phone

Запросить курсор для информации об альбоме

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

Запросить курсор, содержащий информацию о песне для определенного альбома

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

    }
}
Добро пожаловать :)
Большое спасибо за этот четкий ответ. Jecimi
привет vipul, это было то, что я искал и не мог найти нигде, после долгих поисков, наконец, аккуратного и легкого для понимания кода, я сейчас изучаю android и хотел бы знать, можем ли мы извлечь информацию об альбоме, например, изображение альбома и показать то же самое, используя listview. То же, что и во всех медиаплеерах, спасибо за такой отличный код
Это наиболее полный ответ на запрос альбомов и их содержимого. И нет очевидного способа взглянуть на код в MediaStore.java. Решение не тривиально.
Вместо сопоставления названия альбома я сопоставил идентификатор, как в строке, где = MediaStore.Audio.Media.ALBUM_ID + & quot; =? & Quot ;;

Похожие вопросы