2016-01-18 3 views
2

Я пытаюсь получить все музыкальные файлы всех песен, присутствующих на телефоне. Я использую mediastore, чтобы получить все названия песен, исполнителя и т. Д. Как мне получить все музыкальные файлы? класс активность:Получение всех музыкальных файлов

public void getSongList() { 
     //query external audio 
     ContentResolver musicResolver = getContentResolver(); 
     Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 
     //iterate over results if valid 
     if (musicCursor != null && musicCursor.moveToFirst()) { 
      //get columns 
      int titleColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media.TITLE); 
      int idColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media._ID); 
      int artistColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media.ARTIST); 
      //add songs to list 
      do { 
       long thisId = musicCursor.getLong(idColumn); 
       String thisTitle = musicCursor.getString(titleColumn); 
       String thisArtist = musicCursor.getString(artistColumn); 
       songList.add(new Song(thisId, thisTitle, thisArtist)); 
      } 
      while (musicCursor.moveToNext()); 
     } 
    } 
+0

Что случилось сейчас? Вы ничего не получаете в этом курсе или исключении? – mbelsky

+0

http://stackoverflow.com/questions/13568798/list-all-music-in-mediastore-with-the-paths – Manifest

ответ

3

Я также имею такую ​​же проблему, как и you.Now я решить эту проблему только с помощью следующего кода.

/** 
* It Not used AnyWhere in Project but it's Helpful while you need to get all mp3 file in sdcard. 
* it's nothing but just for future used 
* 
*/ 
public void getAllSongs() { 

    Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 

    String[] STAR=null; 
    Cursor cursor = getActivity().managedQuery(allsongsuri, STAR, selection, null, null); 
    //or 
    //Cursor cursor = getActivity().getContentResolver().query(allsongsuri, null, null, null, selection); 




    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      do { 
       String song_name = cursor 
         .getString(cursor 
           .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); 
       int song_id = cursor.getInt(cursor 
         .getColumnIndex(MediaStore.Audio.Media._ID)); 

       String fullpath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); 
       String Duration = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); 

       Log.e(TAG, "Song Name ::"+song_name+" Song Id :"+song_id+" fullpath ::"+fullpath+" Duration ::"+Duration); 

      } while (cursor.moveToNext()); 

     } 
     cursor.close(); 

    } 
} 

этот код работает нормально в моем Application.In настоящем Кодексе мы просто распечатать весь путь песни, и это имя в Log.but ты слишком умный, так что вы можете изменить этот код, согласно вашему требованию.

Надеюсь, вы поняли мою Идею. Лучшее в удалении

+0

Метод 'управляемогоQuery' устарел на уровне API 11. – mbelsky

+0

@mbelsky Пожалуйста, проверьте мои изменения. –

+0

Большое вам спасибо, у меня проблема, когда я добавляю музыку в dowload, это не обновление музыки в моем приложении. Я использую ContentResolver, он обновляется, когда я перезапускаю свою функцию. можете ли вы иметь меня, когда я добавляю музыку в dowload, она будет обновляться в моем приложении? –