Android 10:删除被权限拒绝:android.permission.ACCESS_MEDIA_PROVIDER

发布于 2025-01-16 02:52:07 字数 1369 浏览 4 评论 0原文

我的项目中的目标 SDK 是 31,当我尝试从 DCIM 目录中删除文件时,出现以下错误,例如 删除被权限拒绝:android.permission.ACCESS_MEDIA_PROVIDER。 请考虑这样的文件路径:“/storage/emulated/0/DCIM/Screenshots/pic1.jpg”

我已经尝试了很多方法来找到每个地方的结果,包括堆栈溢出,但没有成功然而。即使我将目标 SDK 更改为更低的 30 但也不起作用。

以下是我已经研究过的解决方案,但没有任何效果:

1.manifest 文件中的标志

android:requestLegacyExternalStorage="true"
android:preserveLegacyExternalStorage="true"

2.manifest 文件中的权限

<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()

注意:文件路径被硬编码只是为了更好地解释

请查找附加日志

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

我还应该在代码中添加什么来解决此问题。提前致谢。

Target SDK in my project is 31 and when I'm trying to delete a file from DCIM directory, I'm getting following error such as delete denied by permission:android.permission.ACCESS_MEDIA_PROVIDER.
Please consider file path like this: "/storage/emulated/0/DCIM/Screenshots/pic1.jpg"

I have tried so much to find the result every where including stack overflow, but didn't succeeded yet. Even I changed target SDK to lower 30 but not worked.

Following are the solutions that I had already worked on but nothing works:

1.flags in manifest file

android:requestLegacyExternalStorage="true"
android:preserveLegacyExternalStorage="true"

2.permissions in manifest file

<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" />

Please find the attached code

val fileToDelete = File("/storage/emulated/0/DCIM/Screenshots/pic1.jpg")
fileToDelete.delete()

NOTE: filepath is hardcoded only to explain better

Please find the attached log

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

What else should I put in my code to solve this issue. Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

血之狂魔 2025-01-23 02:52:07

要在 android 10 及更高版本中删除媒体文件,您可以尝试 contentresolver API。

您需要将媒体的内容 uri 传递给“contentResolver.delete()”方法&你将能够轻松做到。

这是我关于如何使用 Java 执行此操作的帖子 - Android 中的作用域存储 — 写入和存储删除媒体文件

To delete media files in android 10 and above, You can try contentresolver API.

You need to pass the media's content uri to the 'contentResolver.delete()' method & you will be able to do it easily.

Here is my post on how to do that using Java - Scoped Storage in Android — Writing & Deleting Media Files

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文