使用 Android 10 (API 29) 在模拟器上查询 ContentProvider
Query ContentProvider on Emulator with Android 10 (API 29)
我使用以下 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
从 <uses-permission>
元素中删除 android:maxSdkVersion="28"
。如果您打算从 MediaStore
中查询非您自己的应用程序的内容,您需要 READ_EXTERNAL_STORAGE
— 包括运行时权限。
您 可以 查询 MediaStore
而无需 READ_EXTERNAL_STORAGE
,但它只会 return 您自己插入到 [=13= 中的项目].
有关更多信息,请参阅 this blog post。
我使用以下 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
从 <uses-permission>
元素中删除 android:maxSdkVersion="28"
。如果您打算从 MediaStore
中查询非您自己的应用程序的内容,您需要 READ_EXTERNAL_STORAGE
— 包括运行时权限。
您 可以 查询 MediaStore
而无需 READ_EXTERNAL_STORAGE
,但它只会 return 您自己插入到 [=13= 中的项目].
有关更多信息,请参阅 this blog post。