我一直在阅读Android文档,但我找不到一个解决方案来在Android 10(API Level 29)中删除多个文件而不弹出多个对话框。
我在Android文档中找到了以下内容:
想要删除媒体文件时的入口点。
我在Android文档中找到了以下内容:
- API Level < 29:无需对话框即可删除文件,应用启动时授予权限
- API Level > 29:通过显示所有文件的对话框来删除文件,用户必须确认
- API Level = 29:通过为每个文件显示权限对话框来删除文件
想要删除媒体文件时的入口点。
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {
deleteMediaR(activity, uris)
}
Build.VERSION.SDK_INT == Build.VERSION_CODES.Q -> {
deleteMediaQ(activity, uris)
}
else -> {
deleteMediaDefault(activity, uris)
}
API级别29及以上
@RequiresApi(Build.VERSION_CODES.R)
private fun deleteMediaR(activity: Activity, uris: ArrayList<String>) {
val contentResolver = activity.contentResolver
val collection: ArrayList<Uri> = ArrayList()
collection.addAll(uris.map { uri -> Uri.parse(uri) })
val pendingIntent = MediaStore.createDeleteRequest(contentResolver, collection)
activity.startIntentSenderForResult(
pendingIntent.intentSender, 42, null, 0, 0, 0, null)
}
API级别29
@RequiresApi(Build.VERSION_CODES.Q)
private fun deleteMediaQ(activity: Activity, uris: ArrayList<String>) {
try {
deleteMediaDefault(activity, uris)
} catch (exception: Exception) {
if (exception is RecoverableSecurityException) {
val pendingIntent: PendingIntent = exception.userAction.actionIntent
activity.startIntentSenderForResult(pendingIntent.intentSender,
42, null, 0, 0, 0, null)
}
}
}
低于 API 级别 29
contentResolver.delete(uri, where, media))
这是一个仅涉及 Android 10 的非常令人沮丧的问题。我认为谷歌忘记在他们的 API 中实现此功能。然而,我希望有适当的解决方案,因为使用 Android 10 时会破坏应用程序。