拍照意图在数据上返回空值



我正在创建一个应用程序,用于在特定过程后拍照并从图库中删除图像。这是我的代码

  Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
      startActivityForResult(takePictureIntent, requestCode);
  }

我像这样处理结果

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        image1 = (Bitmap) extras.get(IMAGE_BUNDLE_NAME);
        imageView1.setImageBitmap(image1);
        imageUri1 = data.getData();
    }
}

问题是data.getData();在某些设备中返回null。我试图用这段代码替换URI

imageUri1 = getImageUri(getActivity(), image1);

而这种方法

public 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);
}

如果我使用此Uri我无法从设备中删除文件。这就是我删除图像的方式

private void deleteFileFromMediaStore(final ContentResolver contentResolver, int requestCode) {
    String canonicalPath;
    File fdelete = new File(imageUri1.getPath());
    if(fdelete != null){
        try {
            canonicalPath = fdelete.getCanonicalPath();
        } catch (IOException e) {
            canonicalPath = fdelete.getAbsolutePath();
        }
        final Uri uri = MediaStore.Files.getContentUri(Constants.EXTERNAL_STORAGE_CONSTANT);
        final int result = contentResolver.delete(uri,
                MediaStore.Files.FileColumns.DATA + "=?", new String[] {canonicalPath});
        if (result == 0) {
            final String absolutePath = fdelete.getAbsolutePath();
            if (!absolutePath.equals(canonicalPath)) {
                contentResolver.delete(uri,
                        MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});
            }
        }
    }
}

如何删除照片或如何在所有设备上data.getData()设为非空?

问题是data.getData(;在某些设备中返回null

它将返回大多数相机应用程序的null,因为它应该返回 null .

如何删除照片

将缩略图照片保存到文件(compress()FileOutputStream(。

或者,使用 EXTRA_OUTPUT 请求相机应用将全尺寸照片保存到您指定的位置(例如,使用 FileProvider 提供的Uri(。

或者,使用像Fotoapparat这样的库直接在你的应用中拍摄照片,而不是依赖数百个相机应用中的一个。

如何在所有设备上使"data.getData(("不为空?

你不能。

相关内容

  • 没有找到相关文章

最新更新