如何解决我们可以使用 MediaStore API 删除图像文件吗?如果是,那么如何
我需要在我的应用程序中使用后台服务一段时间后删除屏幕截图文件,并且使用上述方法可以正常工作
private void deleteTheFile(String path) {
File fdelete = new File(path);
if (fdelete.exists()) {
if (fdelete.delete()) {
getApplicationContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(new File(path))));
Log.i(TAG,"deleteTheFile: file deleted");
} else {
Log.i(TAG,"deleteTheFile: file not dellleeettteeeddd");
}
}
但众所周知,android R (11) 带来的变化 所以我尝试用
更新我的应用程序MANAGE_EXTERNAL_STORAGE 权限
但谷歌拒绝了我的更新说
问题:需要使用媒体商店 API
您已请求访问所有文件访问权限,但它 似乎您的应用程序的核心功能只需要访问媒体 文件。使用 MediaStore API,应用程序可以贡献和访问媒体 可在外部存储卷上使用,无需 访问所有文件的权限。
请更新您的应用,以便该功能使用媒体商店 API 和 删除所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限。
但我以前从未使用过媒体商店 API,我不知道它可以用它删除图像文件,因为删除文件属于可写部分
解决方法
使用 createDeleteRequest
private fun deleteImages(uris: List<Uri>) {
val pendingIntent = MediaStore.createDeleteRequest(contentResolver,uris.filter {
checkUriPermission(it,Binder.getCallingPid(),Binder.getCallingUid(),Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != PackageManager.PERMISSION_GRANTED
})
startIntentSenderForResult(pendingIntent.intentSender,REQ_CODE,null,0)
}
使用 contentResolver
// Remove a specific media item.
val resolver = applicationContext.contentResolver
// URI of the image to remove.
val imageUri = "..."
// WHERE clause.
val selection = "..."
val selectionArgs = "..."
// Perform the actual removal.
val numImagesRemoved = resolver.delete(
imageUri,selection,selectionArgs)
https://github.com/android/storage-samples/tree/main/MediaStore
这是一个android官方示例,您可以按照了解并尝试使用MediaStoreAPI来实现它
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。