拍照意图会在数据上返回null

时间:2018-03-15 15:36:26

标签: android file android-gallery

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

  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()非空?

1 个答案:

答案 0 :(得分:0)

  

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

大多数相机应用会返回null,因为它应该返回null

  

如何删除照片

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

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

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

  

如何在所有设备上使“data.getData()”为空?

你不能。