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

标签 android android-permissions

当我只在我的 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/

相关文章:

android - 为 Kotlin 多平台项目运行单元测试时出错

android - 权限拒绝 : requires android. permission.READ_EXTERNAL_STORAGE,或 grantUriPermission() (API 23)

android - ACCESS_COARSE_LOCATION 从 play-services-base lib 合并

android - 如何在android xml中使用自定义字体?

java - 将数据从android添加到mysql数据库时出现NullPointer异常

Android: 观察包 id 'add-ons;addon-google_apis-google-23'

c# - 多次声明一个对象为 "new"会有什么后果?

android - onRequestPermissionsResult 不会在非 Activity 和非 Fragment 类中调用

java - 我的应用程序无法仅在 One plus 设备上访问互联网

android - 如果我已经有 ACCESS_FINE_LOCATION,我可以省略 ACCESS_COARSE_LOCATION 吗?