簡體   English   中英

使用 Android 10 (API 29) 在模擬器上查詢 ContentProvider

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

我使用以下 Java 代碼通過 api27 從 Android Studio Emulator 查詢音頻文件。 不幸的是,此代碼不適用於 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."));

清單文件

    <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

<uses-permission>元素中刪除android:maxSdkVersion="28" 您需要READ_EXTERNAL_STORAGE — 包括運行時權限 — 如果您打算從MediaStore查詢來自您自己以外的應用程序的內容。

可以在沒有READ_EXTERNAL_STORAGE情況下查詢MediaStore ,但它只會返回您自己插入到MediaStore

有關更多信息,請參閱此博客文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM