Android 10 - Запрос MediaStore с различными типами Uri - PullRequest
0 голосов
/ 04 мая 2020

У меня проблема со стандартным комплектовщиком android. У меня есть следующий код, чтобы запросить медиастор с помощью URI из стандартного средства выбора (вызов с ACTION_GET_CONTENT):

        private AudioRecord getAudioInfo(Uri uri) {
        AudioRecord rec = new AudioRecord();
        try {
            if (DocumentsContract.isDocumentUri(this, uri)){
                String[] data = {MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ALBUM};
                String wholeID = DocumentsContract.getDocumentId(uri);
                String id = wholeID.split(":")[1];
                String sel = MediaStore.Images.Media._ID + "=?";
                CursorLoader loader = new CursorLoader(getApplicationContext(),
                        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, data, sel, new String[]{ id }, null);
                Cursor cursor = loader.loadInBackground();
                cursor.moveToFirst();
                rec.setData(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
                rec.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)));
                rec.setArtist(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)));
                rec.setAlbum(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)));
                rec.setFilename("8D " + rec.getTitle() + ".mp3");
                cursor.close();
                return rec;
            } else {
                String[] data = {MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ALBUM};
                CursorLoader loader = new CursorLoader(getApplicationContext(), uri, data, null, null, null);
                Cursor cursor = loader.loadInBackground();
                cursor.moveToFirst();
                rec.setData(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
                rec.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)));
                rec.setArtist(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)));
                rec.setAlbum(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)));
                rec.setFilename("8D " + rec.getTitle() + ".mp3");
                cursor.close();
                return rec;
            }

        }catch(Exception e){
            e.printStackTrace();
            return rec;
        }
    }

-

В средстве выбора у меня есть различные варианты выбора файла. Эти параметры показаны и пронумерованы на рисунке ниже:

enter image description here

Вот выходные значения Uri для различных чисел:

  1. (Musik:

    содержание: // мультимедиа / внешние / аудио / медиа / 3301

  2. (Загрузки):

    content: //com.android.providers.downloads.documents/document/msf%3A3301

  3. (VOG-L29):

    содержимое: //com.android.externalstorage.documents/document/primary%3ADownload%2FJuice%20WRLD%20Unreleased%2FBag.mp3

  4. (Dateien):

    содержание: // media / external / audio / media / 3301

  5. (Audio):

    content: //com.android.providers.media.documents/document/audio%3A3301

Код работает для всех Uri, кроме номера 3. В этом Uri нет идентификатора, который я могу использовать для запроса медиастора.

Поэтому вопрос:

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

...