【问题标题】:android.permission.WRITE_EXTERNAL_STORAGE granted but access deniedandroid.permission.WRITE_EXTERNAL_STORAGE 已授予但访问被拒绝
【发布时间】:2016-12-02 23:50:14
【问题描述】:

以下代码输出为“Write grant”,但之后出现错误 '/storage/emulated/0/Download/test.txt: open failed: EACCES (Permission denied)'

怎么了?

@RunWith(AndroidJUnit4.class)
public class FileStorageTest {

    private static final String TAG = FileStorageTest.class.getSimpleName();

    @Test
    public void test() throws Exception {
        Context context = InstrumentationRegistry.getTargetContext();
        if (context.checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) {
            Log.d(TAG, "Write granted");
        } else {
            Log.e(TAG, "Write refused");
        }

        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"test.txt");
        new FileOutputStream(file).close();
    }
}

【问题讨论】:

  • 可能你还需要使用READ_EXTERNAL_STORAGE permission to read data from the device.
  • @TimCastelijns 先生,我们不需要在Runtime 定义这两个权限吗?
  • @jaydroider 你可以,但文档说 如果应用程序请求其清单中列出的危险权限,并且该应用程序已经在同一权限组中拥有另一个危险权限,系统会立即授予无需与用户进行任何交互的许可。
  • 你的sdk版本是>=23吗?
  • 是的,我的错。授予 1 不会授予另一个,但它所做的是在您请求时自动授予另一个

标签: android file android-permissions


【解决方案1】:

您还需要添加READ_EXTERNAL_STORAGE 从设备读取数据的权限。

RunTime也添加此权限。

    if (context.checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) {
            Log.d(TAG, "Read granted");
    } else {
            Log.e(TAG, "Read refused");
    }

【讨论】:

  • READ_EXTERNAL_STORAGE 也存在,但是仍然无法读取该文件。通过在调试模式下运行,我检查了文件是否存在 (TRUE),检查文件是否可以读取 (FALSE),检查是否可以写入 (FALSE),检查是否允许写入和读取外部存储(两者均为 TRUE)。还有其他更新的建议吗?
  • @ranka47 请在新问题中发布您的确切问题,以便了解您面临的具体问题以及您尝试过的问题。
  • 我已经提出并且似乎是 Android 10 如何处理其外部存储的变化的问题。这个问题在这里得到了解决,stackoverflow.com/questions/58379543/…。我通过在清单中添加android:requestLegacyExternalStorage="true" 解决了这个问题。
【解决方案2】:

尝试将其添加到您的清单文件中:

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

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 2017-11-30
    • 2016-03-16
    • 1970-01-01
    • 2014-09-27
    • 2018-07-19
    • 1970-01-01
    • 2011-10-17
    • 2020-04-26
    相关资源
    最近更新 更多