ACTION_IMAGE_CAPTURE将imagefile作为Extra而不是Data返回

时间:2016-08-09 13:07:45

标签: android android-intent camera android-5.0-lollipop huawei

我的应用程序的一个功能包括相机。用户拍照并且应用程序显示图像。

我使用StartActivityForResult使用ACTION_IMAGE_CAPTURE启动一个intent,并使用onActivityResult捕获响应。 通常我可以简单地在onActivityResult上收到的意图上调用 getData(),并获取MediaProvider的内容uri。

我的问题如下:我的一个测试设备,华为ALE-L21,我在onActivityResult中获得的意图没有数据,而是有一个可包含的额外数据。我如何从中获取用户照片? Android Studio没有告诉我parcellable extra的名称

免责声明:我调用getActivity()因为我在片段中使用此代码

这是我用来拿相机的。

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
    startActivityForResult(takePictureIntent, getResources().getInteger(R.integer.RQ_PERMISSION_WRITE_EXTERNAL_STORAGE));
}

这是我的onActivityResult

中的代码
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultIntent) {
    super.onActivityResult(requestCode, resultCode, resultIntent);

    switch (requestCode) {
        case 1: //RQ_ImageCapture
        case 2: //RQ_ImageSelected
            if (resultIntent != null) {
                try {
                    Uri selectedImage = resultIntent.getData();
                    if(selectedImage != null) {
                        Bitmap bitmap = 
                        MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImage);
                        setImageAsBackground(selectedImage, bitmap);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            break;
    }
}

1 个答案:

答案 0 :(得分:1)

  

通常我可以简单地在onActivityResult上收到的意图上调用getData()并获取MediaProvider的内容uri。

您的许多代码都会失败,包括所有最新的Nexus设备。 ACTION_IMAGE_CAPTURE不应该返回Uri。引用the documentation

  

如果EXTRA_OUTPUT不存在,则在额外字段中返回小尺寸图像作为Bitmap对象。这对于只需要小图像的应用程序非常有用。如果存在EXTRA_OUTPUT,则将将全尺寸图像写入EXTRA_OUTPUT的Uri值。

由于您未加入EXTRA_OUTPUT,因此您将获得带有缩略图的data额外(getData().getExtra("data"))。

  

我在onActivityResult中获得的意图没有数据,相反,它有一个可包含的附加内容

根据你的ACTION_IMAGE_CAPTURE请求,这就是你应该得到的。

如果您想要一个完整尺寸的图片,请添加EXTRA_OUTPUT,或许指向应用中的FileProvider,例如我在this sample app中展示。然后,您知道照片应该去的Uri,因为您指定了Uri