即使具有READ_EXTERNAL_STORAGE权限,getExternalFilesDir(null)也返回null

时间:2015-09-25 03:16:04

标签: android android-permissions

当我只在清单中声明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,我重启了设备。

3 个答案:

答案 0 :(得分:2)

这是来自documentation

的说明
  

如果当前未安装外部存储,则返回null   无法确保路径存在;

您可以使用Environment.getExternalStorageState来检查其状态。

应用程序无法使用/安装外部存储的一种常见情况是设备通过USB连接到计算机。当设备安装在计算机上时,外部存储将无法使用。

答案 1 :(得分:1)

试试这个,打开外部存储空间。

String m_str = Environment.getExternalStorageDirectory()
                .getAbsolutePath().toString();

答案 2 :(得分:-1)

这是因为文档说任何声明WRITE_EXTERNAL_STORAGE权限的应用程序也会被隐式授予读取权限。