【问题标题】:saving file on sdcard with permission error使用权限错误将文件保存在 sdcard 上
【发布时间】:2016-10-29 18:26:32
【问题描述】:

经过无数次搜索,我设法找到了我的 sdcard 的路径,而不是 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());}

我不知道为什么 android 不让我写到 sdcard。我需要一些其他权限吗?

【问题讨论】:

    标签: android permissions android-sdcard


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 因此,可移动存储的唯一访问权限是 Google 本身和手机制造商……太好了。无论如何感谢您的帮助。
    • @Lowrider:不,唯一任意文件系统访问可移动存储的是谷歌本身和设备制造商。欢迎您使用getExternalFilesDirs()(注意复数形式)之类的方法来获取可移动存储上的Android 提供的 位置,您可以使用普通文件I/O 来处理这些位置。或者,使用the Storage Access Framework 允许用户选择存储内容的位置,使用Uri 您可以打开流进行读取和写入。
    【解决方案2】:

    尝试使用这些方法-

    1. 检查uses-permission 语句是否在正确的位置,它们应该在&lt;manifest&gt; 下方和&lt;application&gt; 标记上方。正确的格式 -

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

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

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

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

    编辑 -

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

    【讨论】:

    • 此技术至少在 Android 5.0 中不起作用。由于缺少WRITE_MEDIA_STORAGE 权限,此代码(一旦填写缺失的部分)失败并出现异常。该权限为signature|privileged,普通Android SDK应用无法拥有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多