无法 READ/WRITE 在外部存储上,即使已授予权限

Cannot READ/WRITE on External Storage, even having given Permissions

运行 我的应用程序在华为 Mate 20 上,以下几行:

    String ext_path = Environment.getExternalStorageDirectory().getAbsolutePath();
    File ext_folder = new File(ext_path);
    System.out.println("Path: " + ext_path + " Dir Check: " + ext_folder.isDirectory() + " Can read: " + ext_folder.canRead());

Return: "Path: /storage/emulated/0 Dir Check: true Can read: false"

但是,我已经授予了所有权限,并且还在清单中包含了这些权限:

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

不应该 canRead() return 是吗?我无法写入或读取文件。可能是什么原因?

我也试过:

    String extStore = System.getenv("EXTERNAL_STORAGE");
    File f_exts = new File(extStore);
    System.out.println(f_exts);
    System.out.println(Arrays.toString(f_exts.listFiles()));

我得到:"EXTERNAL_STORAGE" 和 "null"

您需要明确要求用户授予上述权限。否则它不会在较新的 android vesions.try 中工作 在 onCreate

中添加它
ActivityCompat.requestPermissions(MainActivity.this, new String[]{READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE},111);

还有

如果您的目标是 Android Q 也 Environment.getExternalStorageDirectory() 不再导致可访问的文件夹,我认为这实际上是您的问题。它已被弃用,取而代之的是 Context.getExternalFilesDir(null) 其中 returns 一个文件。值得一试,因为您的应用程序外部存储应该类似于 "/storage/emulated/0/Android/data/com.example.android.YourApp/" 并且您应该具有读写权限