-1

我需要一个与所有版本兼容的应用程序图片的 Android 应用程序目录路径。我已经搜索了很多,但我还没有找到任何与所有设备兼容的东西。现在我们有了这段代码,但它仍然在picturesDir.exists()withU55ZTEdevices 处给出 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();
    }

在此处输入图像描述

我们应该做什么?我不想检查它是否为 null 以避免崩溃。我想要一个可以保存图片的路径。谢谢。

4

1 回答 1

1

根据 getExternalFilesDir 的文档:“应用程序特定目录的绝对路径。如果共享存储当前不可用,则可能返回 null”。因此,根据文档,如果您使用getExternalFilesDir.

除了未安装外,可能还有其他原因导致外部存储不可用。getExternalStorageStatecall和 call之间也存在竞争的可能性getExternalFilesDir。换句话说,SD 卡可能在调用 getExternalStorageState() 后立即卸载,但在调用 getExternalFilesDir 之前。这种竞争条件可能会导致您的崩溃。

于 2017-08-08T11:15:16.480 回答