用于删除我的应用程序拥有的文件的下一个代码可以正常工作,没有例外RecoverableSecurityException
,因为该文件是由我的应用程序创建的(使用ContentResolver.insert(...)
方法)
getVideoFileContentUri(context, file)?.let { uri ->
try {
context.contentResolver.delete(uri, null, null)
} catch (securityException: RecoverableSecurityException) {
val intentSender =
securityException.userAction.actionIntent.intentSender
intentSender?.let {
activity.startIntentSenderForRecsult(
intentSender,
REQUEST_CODE,
null,
0,
0,
0,
null
)
}
}
}
fun getVideoFileContentUri(context: Context, file: File): Uri? {
val filePath = file.absolutePath
val cursor = context.contentResolver.query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, arrayOf(MediaStore.Video.Media._ID),
MediaStore.Video.Media.DATA + "=? ", arrayOf(filePath), null
)
return if (cursor != null && cursor.moveToFirst()) {
val id: Int = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID))
cursor.close()
Uri.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, "" + id)
} else {
null
}
}
但是,如果我使用方法更新由应用程序创建的文件,ContentResolver.update(...)
则删除该文件将需要许可 - 它会引发RecoverableSecurityException
并启动意图,该意图会打开一个系统对话框以确认修改文件
// here I change file name of the file
val contentValues = ContentValues(1).apply {
put(MediaStore.Video.Media.DISPLAY_NAME, "SOME NEW FILE NAME")
}
contentResolver.update(uri, contentValues, null, null)
所以现在看起来我的应用程序不拥有该文件,并且为了删除它,我的用户必须确认每个文件的删除
这真的很烦人,我该如何解决这个问题?
因此,在应用程序ContentResolver.update(...)
创建的您自己的文件ContentResolver.insert(...)
失去修改此文件的权限后,将需要请求它