即使有存储权限也无法从 SD 卡读取

时间:2021-07-14 20:24:26

标签: java android android-studio permissions

基本上,我正在制作一个应用程序,将手机上的一个文件发送到另一个。例如,手机 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 获取路径,但现在我已经弄清楚了,我有权限问题。感谢任何帮助,如果需要,我可以上传所有代码。

1 个答案:

答案 0 :(得分:0)

评论没有帮助 - 我发现每次打开应用程序时都需要请求权限。这是因为我使用的 android 版本非常不同,因此根据我使用的版本不同,工作方式也不尽相同。 这是我放在 onCreate 方法中的代码:

public static String[] PERMISSIONS_STORAGE = {
        "android.permission.READ_EXTERNAL_STORAGE",
        "android.permission.WRITE_EXTERNAL_STORAGE",
};

ActivityCompat.requestPermissions(
            this,
            PERMISSIONS_STORAGE,
            REQUEST_EXTERNAL_STORAGE
        );

我还有 <uses-permission> 标签,用于在 AndroidManifest 文件内的外部存储中读取和写入。希望这对未来的人有所帮助。