我的项目中的目标SDK是31,当我试图从DCIM目录中删除一个文件时,我会得到以下错误,例如permission:android.permission.ACCESS_MEDIA_PROVIDER.拒绝的删除请考虑这样的文件路径:"/storage/emulated/0/DCIM/Screenshots/pic1.jpg"
我已经尝试过在每个地方查找结果,包括堆栈溢出,但都没有成功。甚至我也将目标SDK更改为降低30,但没有工作。
以下是我已经研究过但没有效果的解决方案:
1.清单文件中的标志
android:requestLegacyExternalStorage="true"
android:preserveLegacyExternalStorage="true"
2.清单文件中的权限
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="40"
tools:replace="android:maxSdkVersion" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
请查找所附代码
val fileToDelete = File("/storage/emulated/0/DCIM/Screenshots/pic1.jpg")
fileToDelete.delete()
注意: filepath硬编码只是为了更好地解释。
请找到所附的日志
2022-03-21 11:22:35.331 8639-20226/com.filepickerdemo D/ContentResolver: delete denied by permission:android.permission.ACCESS_MEDIA_PROVIDER#content://media/external/images/media#_data = ?#/storage/emulated/0/DCIM/Screenshots/pic1.jpg
我还应该在代码中添加什么来解决这个问题。提前谢谢。
发布于 2022-05-02 09:26:53
要删除android 10及以上版本中的媒体文件,您可以尝试使用内容解析器API。
您需要将媒体的内容uri传递给'contentResolver.delete()‘方法&您将能够轻松地做到这一点。
下面是我关于如何使用Java - Android中的作用域存储-编写和删除媒体文件实现这一操作的文章。
https://stackoverflow.com/questions/71554739
复制相似问题