Запросите ContentProvider на эмуляторе с Android 10 (API 29) - PullRequest
1 голос
/ 12 января 2020

Я использую следующий код Java для запроса аудиофайлов из Android Studio Emulator с api27. К сожалению, этот код не работает для API 29.

        String[] projection = {
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Images.Media.DATA,
            MediaStore.Audio.Media.TRACK,
            MediaStore.Audio.Media.YEAR
    };
    uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Log.i(TAG, "Querying media...");
    Log.i(TAG, "URI: " + uri.toString());
    // Perform a query on the content resolver. The URI we're passing specifies that we
    // want to query for all audio media on external storage (e.g. SD card)
    Cursor cur = getContentResolver().query(uri, null,
            MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);
    Log.i(TAG, "Query finished. " + (cur == null ? "Returned NULL." : "Returned a cursor."));

Манифест. xml

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="28"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28"/>

Я не могу найти ни одного намека в документации, что изменилось между api28 и api29 относительно Запрос MediaStore.

Пожалуйста, помогите, спасибо GGK

1 Ответ

1 голос
/ 12 января 2020

Удалите android:maxSdkVersion="28" из ваших <uses-permission> элементов. Вам нужно READ_EXTERNAL_STORAGE - включая разрешение времени выполнения - если вы намереваетесь запросить MediaStore для контента из приложений, отличных от вашего собственного.

Вы можете запросить MediaStore без READ_EXTERNAL_STORAGE, но он будет возвращать только те элементы, которые вы вставили в MediaStore.

Подробнее см. в этом блоге .

...