无法 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/" 并且您应该具有读写权限
运行 我的应用程序在华为 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/" 并且您应该具有读写权限