使用Android 10(API 29)在模拟器上查询ContentProvider

问题描述 投票:0回答:1

我使用以下Java代码从带有api27的Android Studio仿真器中查询音频文件。不幸的是,此代码不适用于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."));

Manifest.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"/>

我在文档中找不到任何有关MediaStore查询的api28和api29之间发生了什么变化的提示。

请帮助,谢谢GGK

android android-contentprovider
1个回答
0
投票

android:maxSdkVersion="28"元素中删除<uses-permission>。如果要查询READ_EXTERNAL_STORAGE来获取非您自己的应用程序中的内容,则需要MediaStore-包括运行时权限。

可以查询没有MediaStoreREAD_EXTERNAL_STORAGE,但是它只会返回您自己插入MediaStore的项目。

请参阅this blog post以了解更多。

© www.soinside.com 2019 - 2024. All rights reserved.