简体   繁体   English

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

[英]Query ContentProvider on Emulator with Android 10 (API 29)

I use the following Java code for querying audio files from Android Studio Emulator with api27.我使用以下 Java 代码通过 api27 从 Android Studio Emulator 查询音频文件。 Unfortunately this code not works for api 29.不幸的是,此代码不适用于 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"/>

I can't find any hint in the documentation what has changed between api28 and api29 regarding MediaStore query.我在文档中找不到关于 MediaStore 查询的 api28 和 api29 之间发生了什么变化的任何提示。

Please help, Thanks GGK请帮忙,谢谢GGK

Remove android:maxSdkVersion="28" from your <uses-permission> elements.<uses-permission>元素中删除android:maxSdkVersion="28" You need READ_EXTERNAL_STORAGE — including the runtime permission — if you intend to query the MediaStore for content from apps other than your own.您需要READ_EXTERNAL_STORAGE — 包括运行时权限 — 如果您打算从MediaStore查询来自您自己以外的应用程序的内容。

You can query MediaStore without READ_EXTERNAL_STORAGE , but it will only return items that you inserted yourself into the MediaStore .可以在没有READ_EXTERNAL_STORAGE情况下查询MediaStore ,但它只会返回您自己插入到MediaStore

See this blog post for more.有关更多信息,请参阅此博客文章

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM