【问题标题】:Uri returned in camera intent is null [duplicate]相机意图中返回的 Uri 为空 [重复]
【发布时间】:2015-12-13 20:15:36
【问题描述】:

我正在尝试创建一个拍摄照片或将照片上传到服务器的 Android 应用程序。我的主要目标是获取意图中返回的照片的 URI。我已按照 [1] 中的步骤进行操作。 问题是,在带有 Lollipop 版本 5.1.1 的手机上,它可以正常工作,并且意图返回照片的 URI,但在带有 Jelly Bean 版本 4.2.1 的手机上,意图中返回的 URI 为空。

这是我的代码

创建视图并为按钮设置监听器

static final int REQUEST_TAKE_PHOTO = 1;
static final int REQUEST_GET_PHOTO = 2;   

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home_page, container, false);

    camera = (FloatingActionButton) view.findViewById(R.id.take_photo);
    upload = (FloatingActionButton) view.findViewById(R.id.upload_photo);
    photo = (ImageView) view.findViewById(R.id.photo);

    camera.setOnClickListener(takePhoto);
    upload.setOnClickListener(uploadPhoto);

    return view;
}

拍照动作

   View.OnClickListener takePhoto = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }
        }
    };

从图库监听器上传

View.OnClickListener uploadPhoto = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        if (photoPickerIntent.resolveActivity(getActivity().getPackageManager()) != null) {
            photoPickerIntent.setType("image/*");
            startActivityForResult(photoPickerIntent, REQUEST_GET_PHOTO);
        }
    }
};

处理 Intent 结果

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == Activity.RESULT_OK && (requestCode == REQUEST_TAKE_PHOTO || requestCode == REQUEST_GET_PHOTO)) {

        Uri imageUri = data.getData();

        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getApplicationContext().getContentResolver(), imageUri);
            String filePath = getPath(imageUri);
            bitmap = BitmapRotator.rotateBitmap(bitmap, filePath);

            photo.setImageBitmap(bitmap);
            UploadPhotoController.uploadPhoto(filePath);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (PhotoNotFoundException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }
}

data.getData() 为 null,因此我无法获取 uri 或图像的文件路径。

谢谢。

[1]http://developer.android.com/training/camera/photobasics.html

【问题讨论】:

  • 你能添加整个功能而不是只添加这部分吗?
  • 我添加了打洞功能
  • 这可能是 JB 设备上相机意图的错误实现。尝试在此设备上安装Open Camera,并检查其行为是否有所不同。
  • 还有stackoverflow.com/questions/34047500/…。简而言之,不应该有返回的Uri。由于您没有提供EXTRA_OUTPUT,因此来自ACTION_IMAGE_CAPTURE 的唯一结果是data.getExtra("data"),这将是一个缩略图。
  • 非常感谢您的帮助。我已经解决了我的问题

标签: android-intent android-camera android-camera-intent


【解决方案1】:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多