java.lang.IllegalStateException: 构建唯一文件失败: /storage/emulated/0/Pictures 标题 image/jpeg Android 10(Samsung note 10+)

java.lang.IllegalStateException: Failed to build unique file: /storage/emulated/0/Pictures Title image/jpeg Android 10(Samsung note 10+)

我正在使用下面的代码从相机获取图像 uri

public static Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}

这仅在 android 10 中出现错误,早期版本使用这种 code.Any 方式工作正常,与版本无关 我只是更改了 insertImage() 中的硬编码 "Title"至

public static Uri getImageUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, **"IMG_" + Calendar.getInstance().getTime(),** null);
        return Uri.parse(path);
    }

现在它是一个带有 IMG_+时间的标签

是的,此错误仅在 Android10 中出现,并且仅在某些设备型号中出现。

所有图像都存储为“标题”,但需要一个唯一的名称。

如果您尝试同时存储多个图像,则接受的答案并不总是生成唯一的名称。

所以替换 insertImage 调用:

String path = MediaStore.Images.Media.insertImage(
    inContext.getContentResolver(), inImage, "IMG_" + System.currentTimeMillis(), null
);

是的,我有 Android 11,当我从相机上传图像时它无法识别路径。 我已经通过

解决了这个问题
  Random rand = new Random();
          int randNo = rand.nextInt(1000);
String path = MediaStore.Images.Media.insertImage(
    inContext.getContentResolver(), inImage, "IMG_" + randNo, null
);