【发布时间】:2021-02-14 15:22:40
【问题描述】:
下面是AndroidManifest文件代码
<application
android:name=".application.SomeApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_config"
android:hardwareAccelerated="true"
android:resizeableActivity="true"
android:requestLegacyExternalStorage="true"
android:theme="@style/THEME_DEFAULT_BLUE_ACCENT">
删除文件代码
val result = CommonApp.getContext().contentResolver.delete(fileForAction.uri,
"${MediaStore.MediaColumns._ID} = ?", arrayOf(fileForAction.id.toString()))
if(result > 0){ successDeleted++ } else { failedDeleted++ }
在上面的代码中 fileForAction.uri 是特定的视频文件 uri 示例:“content://media/external/video/media/23”
我已经在 Android API 级别 29 和 30 上对此进行了测试。但是得到 android.app.RecoverableSecurityException: com.packagename.someapp 无法访问 content://media/external/video/media/23
正如我在本文档中看到的 https://developer.android.com/training/data-storage/shared/media#remove-item
如果范围存储不可用或未启用,我们可以删除其他应用拥有的文件,而无需处理 RecoverableSecurityException。
【问题讨论】:
-
我的问题是,当我选择通过在 AndroidManifest 中提供 android:requestLegacyExternalStorage = true 来禁用范围存储时,为什么在删除文件时会出现 RecoverableSecurityException。