在权限错误上保存sdcard上的文件

时间:2016-10-29 18:26:32

标签: android permissions android-sdcard

经过无数次搜索,我设法找到了我的SD卡的路径而不是android模拟存储。但是当我尝试制作.txt文件夹时,最终会出现错误

/storage/37F0-1515/DCIM/100MEDIA/test.txt: open failed: EACCES (Permission denied)

我不知道为什么,因为我有

的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我还使用

启用了权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, request2);
    }

以下是我使用

的代码
    File sdCard = new File("/storage/37F0-1515/DCIM/100MEDIA");
    File dir = new File(sdCard.getAbsolutePath());


    if (!dir.exists()) {
        dir.mkdirs();
    }

    final File file = new File(dir, "test" + ".txt");
    try {
        BufferedWriter bufferedWriter = null;
        bufferedWriter = new BufferedWriter(new FileWriter(file));
        bufferedWriter.write("test");
        bufferedWriter.close();
    }
    catch(Exception e){Log.v("myApp", e.toString());}

我不知道为什么安卓不会让我写信给SD卡。我还需要其他一些权限吗?

2 个答案:

答案 0 :(得分:0)

  

我不知道为什么,因为我有

的权限

这些权限适用于external storage,而不是removable storage

  

我不知道为什么android不会让我写sdcard

您在Android 4.4+上没有对可移动存储的任意文件系统访问权限。

答案 1 :(得分:-1)

尝试使用这些方法 -

  1. 检查uses-permission语句是否在正确的位置,它们应位于<manifest>以上<application>个标记之下。格式正确 -

    <manifest> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ... <application> ... <activity> ... </activity> </application> </manifest>

  2. 从Android Kitkat开始,有一个新的存储策略 -

  3.   

    WRITE_EXTERNAL_STORAGE权限只能授予对设备上主外部存储的写访问权限。不得允许应用程序写入辅助外部存储设备,但合成权限允许的特定于程序包的目录除外。以这种方式限制写入可确保系统在卸载应用程序时清理文件。

    T 然而,他可以在没有生根的情况下被利用(虽然我没有尝试过这个),因为mentioned here

    编辑 -

    上述漏洞利用不适用于Android 5+。这个问题没有标准的解决方案。某些漏洞可能是可用的,但它们将取决于设备特定/不可靠/根访问。 但是,可以使用存储访问框架等工具。