getExternalFilesDir(null) returns null 即使有 READ_EXTERNAL_STORAGE 权限
getExternalFilesDir(null) returns null even with READ_EXTERNAL_STORAGE permission
当我只在清单中声明 READ_EXTERNAL_PERMISSION 时,getExternalFilesDir() returns 为空。如果我声明 WRITE_EXTERNAL_STORAGE,getExternalFilesDir() returns something.
我做了一些检查,看看我是否真的有权限,并检查了是否安装了外部存储。
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,我重新启动了设备。
这是来自 documentation 的注释:
Returns null if external storage is not currently mounted so it
could not ensure the path exists;
您可以使用 Environment.getExternalStorageState 检查它的状态。
应用程序的外部存储不 available/mounted 的一种常见情况是设备通过 USB 连接到计算机。当设备安装在计算机上时,外部存储对设备不可用。
这是因为文档说任何声明 WRITE_EXTERNAL_STORAGE 权限的应用程序也被隐式授予读取权限。
试试这个,打开外部存储。
String m_str = Environment.getExternalStorageDirectory()
.getAbsolutePath().toString();
当我只在清单中声明 READ_EXTERNAL_PERMISSION 时,getExternalFilesDir() returns 为空。如果我声明 WRITE_EXTERNAL_STORAGE,getExternalFilesDir() returns something.
我做了一些检查,看看我是否真的有权限,并检查了是否安装了外部存储。
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,我重新启动了设备。
这是来自 documentation 的注释:
Returns null if external storage is not currently mounted so it could not ensure the path exists;
您可以使用 Environment.getExternalStorageState 检查它的状态。
应用程序的外部存储不 available/mounted 的一种常见情况是设备通过 USB 连接到计算机。当设备安装在计算机上时,外部存储对设备不可用。
这是因为文档说任何声明 WRITE_EXTERNAL_STORAGE 权限的应用程序也被隐式授予读取权限。
试试这个,打开外部存储。
String m_str = Environment.getExternalStorageDirectory()
.getAbsolutePath().toString();