当我只在我的 list 中声明 READ_EXTERNAL_PERMISSION 时,getExternalFilesDir() 返回 null。如果我声明 WRITE_EXTERNAL_STORAGE,getExternalFilesDir() 会返回一些东西。
我做了一些检查,看看我是否真的有权限,并检查了是否安装了外部存储。
PackageManager pm = mContext.getPackageManager();
int permRead = pm.checkPermission( Manifest.permission.READ_EXTERNAL_STORAGE, mContext.getPackageName() );
//permRead: "0"
int permWrite = pm.checkPermission( Manifest.permission.WRITE_EXTERNAL_STORAGE, mContext.getPackageName());
//permWrite: "-1"
String extState = Environment.getExternalStorageState();
// extState: "mounted"
if ( permRead == PackageManager.PERMISSION_GRANTED
&& extState.equals( Environment.MEDIA_MOUNTED ) )
{
File dir = mContext.getExternalFilesDir( Environment.DIRECTORY_PICTURES );
// dir is null here!!
... more work...
}
据我了解,我只需要 READ_EXTERNAL_STORAGE 即可从 getExternalFilesDir() 获取一些内容。
可能是什么原因?
附言。我的测试设备是装有 Android 4.1.2 的 LG Optimus Pro G,我重新启动了设备。
最佳答案
这是来自 documentation 的注释:
Returns null if external storage is not currently mounted so it could not ensure the path exists;
您可以使用 Environment.getExternalStorageState检查它的状态。
当设备通过 USB 连接到计算机时,外部存储不可用/无法安装应用程序的一种常见情况。当设备安装在计算机上时,外部存储对设备不可用。
关于android - 即使具有 READ_EXTERNAL_STORAGE 权限,getExternalFilesDir(null) 也会返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32774226/