当我只在清单中声明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()中的内容。
可能是什么原因?
PS。我的测试设备是带有Android 4.1.2的LG Optimus Pro G,我重启了设备。
答案 0 :(得分:2)
这是来自documentation:
的说明如果当前未安装外部存储,则返回null 无法确保路径存在;
您可以使用Environment.getExternalStorageState来检查其状态。
应用程序无法使用/安装外部存储的一种常见情况是设备通过USB连接到计算机。当设备安装在计算机上时,外部存储将无法使用。
答案 1 :(得分:1)
试试这个,打开外部存储空间。
String m_str = Environment.getExternalStorageDirectory()
.getAbsolutePath().toString();
答案 2 :(得分:-1)
这是因为文档说任何声明WRITE_EXTERNAL_STORAGE权限的应用程序也会被隐式授予读取权限。