【发布时间】:2021-07-14 20:24:26
【问题描述】:
基本上,我正在制作一个将手机上的一个文件发送到另一个文件的应用程序。因此,例如,手机 A 将连接到服务器,上传文件,然后服务器将该文件发送到手机 B。这一切都在 android 上。我已经制作了一个可以工作的套接字服务器。但是,每次我尝试发送文件时,由于权限被拒绝,我无法打开它:
android.system.ErrnoException: open failed: EACCES (Permission denied)
我已将权限添加到清单(在<manifest></manifest> 标签内):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我还要求onCreate() 的权限:
public static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
ActivityCompat.requestPermissions(
this,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
我也尝试过使用运行时权限,但仍然没有运气。出于某种原因,这适用于我的 Oneplus 8T,但不适用于任何其他 android 手机(也许我对开发者设置搞砸了太多)。坚持现在该做什么。我首先努力从 URI 获取路径,但现在我发现了,我有权限问题。任何帮助表示赞赏,如果需要,我可以上传所有代码。
【问题讨论】:
-
“我一开始很难从 URI 中获取路径,但现在我明白了”——
Uri不是文件。除非Uri具有file方案,否则不能保证从Uri映射到您将能够读取或写入的某个文件系统路径。作为范围存储的一部分,您在 Android 10+ 上的文件系统访问权限也较少。 -
10以上版本请尽量使用范围存储读写,10之前可以在manifest应用标签中添加legacy external store属性
标签: java android android-studio permissions