gpt4 book ai didi

android - 对 Android 10 上的外部文件的访问权限被拒绝

转载 作者:行者123 更新时间:2023-12-04 03:47:35 32 4
gpt4 key购买 nike

我的应用是 targetSdkVersion = 29
我拍了一张照片,它保存在路径:

src = /storage/emulated/0/DCIM/Camera/IMG_20201120_091943.jpg


然后我想使用 FileInputStream/FileOutputStream 将此图像复制到内部存储。虽然,我的应用程序具有 WRITE/READ 存储权限,但是当我编码时
InputStream inputStream = FileInputStream(src)
我收到了 FileNotFoundException(打开失败:EACCES 权限被拒绝)。
有人有同样的问题吗?
注意:我不想通过使用选项 AndroidManifest.xml 来解决这个问题,因为它是临时的

android:requestLegacyExternalStorage="true"

最佳答案

当您的 targetSdkVersion >= 29那么您必须使用 ScopedStorage,请参阅文档:https://developer.android.com/training/data-storage/use-cases#opt-out-scoped-storage
所以简短的回答是你不能真正做到这一点。如果您的 targetSdkVersion 为 29,您应该使用 MediaStore API 编写共享存储(“/storage/emulated/0/DCIM/Camera/IMG_20201120_091943.jpg”不是您的应用程序私有(private)的,因此适用规则)
以下是使用 MediaStoreApi 将图像插入用户图像的方法:
https://stackoverflow.com/a/56990305/5601663
此外,如果您真的只想保存文件,以便它仅在您的应用程序中可用,那么您不需要使用 MediaStoreApi,请参阅这篇文章,了解如何在您的应用程序私有(private)目录中保存:
https://medium.com/@maksymilian.wojcik/android-saving-files-in-internal-storage-image-from-byte-array-etc-dd7d1b86d309
编辑:您当然可以使用 requestLegacyExternalStorage list 上的标志,但您已经说过您不想使用它
Edit2:我现在看到您想从共享存储中读取。这也行不通,因为如果您的targetSdkVersion >= 29,您需要使用存储访问框架或媒体存储从那里读取。 .因此,对于这种情况,请遵循此处描述的说明:https://developer.android.com/training/data-storage/use-cases#import-image-media

关于android - 对 Android 10 上的外部文件的访问权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64923297/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com