2014-04-03 3 views
0

MediaStore에서 모든 트랙을 가져 오려고합니다.MediaStore의 모든 트랙 얻기

Cursor cursor = managedQuery(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, null, null, null, null); 

while (cursor.moveToNext()) 
{ 
    int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.AudioColumns._ID)); 

    String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE)); 

    String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM)); 

    String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST)); 

    int duration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION)); 

} 

cursor.close(); 

그러나 커서에서 값을 읽을 수 없습니다. 이 코드를 실행할 때

MediaStore.Audio.AudioColumns.TITLE, 
MediaStore.Audio.AudioColumns.ALBUM, 
MediaStore.Audio.AudioColumns.ARTIST and 
MediaStore.Audio.AudioColumns.DURATION 

상수는 null입니다.

위 결과에서 값을 가져 오기 위해 사용해야하는 상수는 무엇입니까? 반환 된 커서를 통해

public Cursor getTrackTrackcursor(Context context, Cursor cursor) { 
    // gets all tracks 
    ContentResolver cr = context.getContentResolver(); 
    final String[] columns = { track_id, track_no, artist, track_name, 
      album, duration, path, year, composer }; 
    cursor = cr.query(uri, columns, null, null, null); 
    return cursor; 
} 

지금 루프와 컬럼에 따라 문자열 값을 추출 :

final String track_id = MediaStore.Audio.Media._ID; 
final String track_no = MediaStore.Audio.Media.TRACK; 
final String track_name = MediaStore.Audio.Media.TITLE; 
final String artist = MediaStore.Audio.Media.ARTIST; 
final String duration = MediaStore.Audio.Media.DURATION; 
final String album = MediaStore.Audio.Media.ALBUM; 
final String composer = MediaStore.Audio.Media.COMPOSER; 
final String year = MediaStore.Audio.Media.YEAR; 
final String path = MediaStore.Audio.Media.DATA; 
final String date_added = MediaStore.Audio.Media.DATE_ADDED; 
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

모든 트랙을 얻으려면 :

답변

2

설정 기둥과 URI를 반환합니다. 커서로 반환 된 열만 추출 할 수 있으므로 NUMBER_OF_SONGS을 (를) 반환하지 않았으므로 오류가 발생합니다. 이 또한 예를 들어 커서 에 의해 반환되어 있는지 확인해야합니다 :

 String stralbum = (c.getString(cursor 
       .getColumnIndex(MediaStore.Audio.Albums.ALBUM))); 
     String strartist = (cursor.getString(cursor 
       .getColumnIndex(MediaStore.Audio.Albums.ARTIST))); 
     String stryear = (cursor.getString(cusrsor 
       .getColumnIndex(MediaStore.Audio.Albums.FIRST_YEAR))); 
     String strnosongs = (cursor.getString(cursor 
       .getColumnIndex(MediaStore.Audio.Albums.NUMBER_OF_SONGS))); 

당신은 올바른 99 %이지만 당신의 URI는 열 레이아웃이 필요합니다. 희망이 도움이