创建与所有版本和设备兼容的Android应用程序目录

时间:2017-08-07 09:22:01

标签: android directory android-external-storage android-storage

我需要一个Android应用程序目录路径到我的应用程序图片兼容所有版本。我搜索了很多,但我还没有发现任何与所有设备兼容的东西。现在我们有了这段代码,但仍然在picturesDir.exists()处使用U55ZTE设备提供NullPointerExcepction。

    File picturesDir;
    String state = Environment.getExternalStorageState();
    // Make sure it's available, if there is no SD card, create new directory objects to make
    // directory on device.
    if (!Environment.MEDIA_MOUNTED.equals(state)) {
        picturesDir = new File(Environment.getDataDirectory() + "/data/" + getApplicationContext().getPackageName() + "/Pictures/");
    } else if (Environment.getExternalStorageState() != null) {
        picturesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    } else{
        String externalStoragePath = Environment.getExternalStorageDirectory()
                .getAbsolutePath();
        picturesDir = new File(externalStoragePath + getApplicationContext().getPackageName() + "/Pictures/");
    }

    if (!picturesDir.exists()) {
        picturesDir.mkdir();
    }

enter image description here

我们该怎么办?我不想检查它是否为null以避免崩溃。我想要一条可以保存图片的路径。感谢。

1 个答案:

答案 0 :(得分:1)

getExternalFilesDir的每个文档:"特定于应用程序的目录的绝对路径。如果共享存储当前不可用,则可以返回null"。因此,根据文档,如果您使用getExternalFilesDir,则 要检查null。

除了未安装外部存储器之外,可能还有其他原因。在致电getExternalStorageState和致电getExternalFilesDir之间也有可能发生争执。换句话说,在调用getExternalStorageState()将其报告为已挂载但在调用getExternalFilesDir之前,可以立即卸载SD卡。这种竞争条件可能会导致您的崩溃。