2012-06-16 34 views
5

Tôi muốn để có được danh sách các bài hát của album bằng cách truy vấn MediaStore với CursorLoaderbài hát Query của một album với CursorLoader

Làm thế nào tôi có thể làm điều này? Tôi có thể tải tất cả các bài hát của thiết bị với mã này:

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

Tôi nên thêm gì vào mã hoặc sửa đổi để lọc các bài hát của một Album cụ thể?

Trả lời

17

Go từng bước

Bước 1 Nhìn tên của album nạp vào điện thoại của bạn

Yêu cầu con trỏ để biết thông tin Album

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

Bước 2 Khi bạn tìm thấy tất cả các album tên.Bạn có thể viết tên album và truy vấn bài hát mong muốn từ nó

Để yêu cầu thông tin bài hát chứa con trỏ cho album cụ thể

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

Trả lại con trỏ này.

Để bạn tham khảo bên dưới là Mã nguồn để truy xuất tên Album và tất cả các bài hát trong đó.

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

    } 
} 
+0

Cảm ơn rất nhiều vì câu trả lời rõ ràng này. – Jecimi

+0

Bạn được chào đón :) –

+0

xin chào vipul, đây là thứ tôi đang tìm kiếm và không thể tìm thấy ở đâu, sau rất nhiều tìm kiếm cuối cùng là một mã gọn gàng và dễ hiểu, tôi hiện đang học android và muốn biết chúng ta có thể trích xuất các thông tin album như hình ảnh album và hiển thị giống như bằng cách sử dụng một listview.the cách nó là trong tất cả các cầu thủ phương tiện truyền thông, cảm ơn cho mã tuyệt vời như vậy – 1234567