一、前言
在Android12版本上面使用
MediaStore
时候有时候会遇到以下错误:
java.lang.IllegalArgumentException: Invalid token /storage/emulated/0/Download/s-kz-02.jpg
其代码编写如下:
val res: Int = contentResolver.delete(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.Media.DATA +"= \""+ filePath +"\"",null)
该问题的解决方式为,在高版本授予
全部文件访问
权限。其代码使用方式如下:
**注:**如果使用
MediaStore.Images.Media._ID
的方式删除也是删不掉的。另外File文件删除也删不掉(因为没权限)
二、原因
AndroidQ (version 29以上)对文件访问进行了限制,如果想对文件进行修改的话需要用户授权。所以如果想绕开用户授权的话只能使用上述方式。下面给出常规方式,代码如下:
privateconstval DELETE_PERMISSION_REQUEST =0x1033privateval permissionNeededForDelete: IntentSender =
recoverableSecurityException.userAction.actionIntent.intentSend
startIntentSenderForResult(
permissionNeededForDelete,
DELETE_PERMISSION_REQUEST,null,0,0,0,null)//上述现获取授权,下一步再调用MediaStore进行删除:
getApplication<Application>().contentResolver.delete(
image.contentUri,"${MediaStore.Images.Media._ID} = ?",arrayOf(image.id.toString()))
**注:**倘若已经通过SAF获取授权后则可以通过Uri的方式进行批量删除。
参考代码如下:


发布评论