Как я могу получить информацию об аудиофайле, выбранном пользователем? (используя SAF и MediaStore) - PullRequest
0 голосов
/ 18 января 2020

Я не могу понять, как запросить данные о файле (который был выбран пользователем) из MediaStore .

1) Я открываю средство выбора файлов следующим образом

public static void launchPicker(Fragment f) {
        Intent pickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
        pickerIntent.setType("audio/mpeg");
        pickerIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
        pickerIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        f.startActivityForResult(pickerIntent, REQUEST_CODE);
    }

2) получить данные из намерения

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data != null) {
            //multiselection only
            ClipData clipData = data.getClipData();
            if (clipData != null) {
                List<Uri> results = new ArrayList<>();
                for(int i = 0; i < clipData.getItemCount(); i++) {
                    Uri uri = clipData.getItemAt(i).getUri();
                    if (uri != null) {
                        results.add(uri);
                    }
                }
                //TODO process result
            }
        }
    }

3) Теперь у меня есть список DocumentUris. Каким должен быть мой следующий шаг?

MediaSoter может конвертировать mediaUri в documentUri через Mediastore.getDocumentUri () , но я не смог найти способ конвертировать documentUri в mediaUri.

Я хотел бы получить эти поля из MediaStore: MediaStore.Audio.Media._ID , ALBUM_ID , ARTIST_ID .

1 Ответ

0 голосов
/ 19 января 2020

Я делаю так:

Uri documentUri = DocumentsContract.buildDocumentUriUsingTree(mUri,
                    documentId);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(mContext,documentUri);
String albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 
String album = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
String title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String track = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
String year = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
...