android获取文件读写权限,Android – 获取DocumentFile,对sd卡上的任何文件路径具有写访问权限(已获得sd卡权限)...

本文探讨了在Android应用中如何获取SD卡的读写权限,通过ACTION_OPEN_DOCUMENT_TREE意图请求权限。当用户从系统文件管理器选择SD卡文件夹后,可以使用DocumentFile类操作文件。然而,直接从文件路径创建DocumentFile对象时,.canWrite()返回false。为了解决这个问题,文章提供了一个检查并返回可写DocumentFile的方法,但指出这种方法效率不高且可能存在问题。作者寻求一种更优雅的解决方案。
摘要由CSDN通过智能技术生成

在我的应用程序中,我使用以下意图获得SD卡写入权限.如果用户从系统文件资源管理器中选择sd卡文件夹,那么我有SD卡写访问权限.

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

intent.putExtra("android.content.extra.SHOW_ADVANCED", true);

startActivityForResult(intent, 42);

之后,我可以使用DocumentFile类修改SD卡中的文件.但我在获取随机文件路径的DocumentFile时遇到问题.

Document.fromFile(new File(path));

Document.fromSingleUri(Uri.fromFile(new File(path)));

两者都返回一个DocumentFile对象,该对象在.canWrite()上返回false.即使我已经获得SD卡许可.

所以我编写了在我的问题末尾发布的方法,以获得一个在.ca​​nWrite()上返回true的DocumentFile.但这很慢……而且感觉非常错误!必须有更好的方法来做到这一点.我还写了一个返回相同字符串的方法

String docFileUriString = docFile.getUri().toString();

对于任何文件,其中docFile是由下面的方法返回的DocumentFile.但

DocumentFile.fromTreeUri(Uri.parse(docFileUriString ));

返回一个DocumentFile,它指向sd卡的根,而不是DocumentFile路径.这很奇怪.有人可以提出更优雅的解决方案吗?

public static DocumentFile getDocumentFileIfAllowedToWrite(

这个错误表明你的应用程序没有权限打开媒体文档提供程序。要解决这个问题,你需要在你的应用程序中请求权限并使用 `ACTION_OPEN_DOCUMENT` 或相关的 API 打开媒体文档提供程序。你可以按照以下步骤解决这个问题: 1. 在你的 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 这将允许你的应用程序读取外部存储器的内容。 2. 在你的代码中请求这个权限: ```java if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); } ``` 这会弹出一个对话框,请求用户允许你的应用程序读取外部存储器的内容。 3. 当用户允许你的应用程序访问外部存储器时,你可以使用 `ACTION_OPEN_DOCUMENT` 或相关的 API 打开媒体文档提供程序。 ```java Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, PICK_IMAGE); ``` 这将打开媒体文档提供程序,用户可以选择他们所需的文档。 请注意,如果你使用的是 Android 10 或更高版本,你需要使用 `ACTION_OPEN_DOCUMENT_TREE` 或相关的 API 来访问外部存储器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值