即使具有给定的权限,也无法在外部存储上进行读/写

时间:2020-03-05 02:27:26

标签: android android-permissions

在Huawei 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());

返回:“路径:/ storage / emulated / 0目录检查:true可以读取:false”

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

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

不能Read()返回True吗?我无法写入或读取文件。可能是什么原因?

我也尝试过:

    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”

1 个答案:

答案 0 :(得分:1)

您需要明确要求用户授予所述权限。否则它将无法在较新的android vesions中工作。尝试在onCreate中添加

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

还有

如果您要定位Android Q,那么Environment.getExternalStorageDirectory()不再导致可访问的文件夹,我认为这实际上是您的问题。不推荐使用Context.getExternalFilesDir(null)来返回文件。值得一试,因为您的应用程序外部存储应该类似于 “ /storage/emulated/0/Android/data/com.example.android.YourApp/”,在该文件上您应该具有读写访问权限

enter image description here