Получение всех музыкальных файлов

Я пытаюсь получить все музыкальные файлы всех песен, присутствующих на телефоне. Я использую 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());
        }
    }

person Hoàng Dũng Phi    schedule 18.01.2016    source источник
comment
Что не так сейчас? Вы ничего не получаете в этом курсоре или исключении?   -  person mbelsky    schedule 18.01.2016
comment
stackoverflow.com/ вопросы/13568798/   -  person Keyur    schedule 18.01.2016


Ответы (1)


У меня тоже такая же проблема, как и у вас. Теперь я решаю эту проблему, просто используя следующий код.

   /**
 * 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();

    }
}

этот код отлично работает в моем приложении. В этом коде мы просто печатаем весь путь к песне и его имя в журнале. но вы слишком умны, чтобы изменить этот код в соответствии с вашими требованиями.

Я надеюсь, что вы ясны с моей идеей. Удачи

person Chirag Solanki    schedule 18.01.2016
comment
@mbelsky Пожалуйста, проверьте мои изменения. - person Chirag Solanki; 18.01.2016
comment
Большое спасибо, у меня проблема, когда я добавляю музыку для загрузки, она не обновляет музыку в моем приложении. я использую ContentResolver, он обновляется, когда я перезапускаю генерацию. Вы можете меня попросить, когда я добавлю музыку для загрузки, она обновится в моем приложении? - person Hoàng Dũng Phi; 19.01.2016