【问题标题】:null intent on onActivityResult when using MediaStore.EXTRA_OUTPUT for ACTION_IMAGE_CAPTURE将 MediaStore.EXTRA_OUTPUT 用于 ACTION_IMAGE_CAPTURE 时,onActivityResult 的意图为空
【发布时间】:2015-02-19 14:57:32
【问题描述】:

我正在尝试从我的 ACTION_IMAGE_CAPTURE 活动中检索文件,但是当我使用时

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

我的活动结果的意图为空。这是完整的代码。

意图

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(cameraIntent, 1888);

我的活动结果

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{  
    if (requestCode == 1888 && resultCode == RESULT_OK)
    {
        Uri uri = (Uri)data.getData();
        Intent i = new Intent(getApplicationContext(), Camara.class);
        i.putExtra("uri", uri);
        startActivity(i);
    }
}

我正在使用以下权限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我需要访问捕获的图像文件,但我的参数 data 为空

然后,如何获取文件?像这样?

File myfile = new File(uri.getPath());

我也试过这个:

Uri uri = (Uri)data.getData();
Intent i = new Intent(getApplicationContext(), Camara.class);
i.putExtra("uri", uri);
startActivity(i);

在这种情况下,我可以用这个来获取位图

Bitmap lafoto = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);

但我无法获取文件

我尝试遵循此解决方案,但对我不起作用Get Path of image from ACTION_IMAGE_CAPTURE Intent

【问题讨论】:

  • get a null intent on my activity result。如果这是真的,那么将会有一个 NullPointerException。有没有?您确定 data==null 吗?还是你的意思是 data.getData()==null?
  • 当我调试时我看到 data=null 显式
  • 所以你有一个 NullPointerExacption!?
  • 是的,我猜当你使用 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);相机应用程序将始终返回空数据并将 jpg 文件写入 Uri 给定
  • 你让最后一个工作了吗?我没有成功。一、图片不能通过勾选ok check来确认。其次,这里会给出哪个 uri? MediaStore.Images.Media.EXTERNAL_CONTENT_URI.getPath() 提供 /external/images/media。

标签: android


【解决方案1】:

问题在于,当您提供 extra_output 时,文件会写入提供的 URI 中,因此您只需通过该 URI 访问即可使用捕获的图像。因此,onActivityResult 上没有提供任何数据,因为当相机应用 Intent 中没有提供 extra_output 时,相机应用只会在 onActivityResult 中返回一个迷你位图作为 Intent extra。

【讨论】:

  • 那么如何判断用户是否取消了摄像头?
  • @Dagon 您只需要检查 onActivityResult() 上的 (resultCode == Activity.RESULT_CANCELED) 是否
【解决方案2】:

我遇到了同样的问题并改变了我的代码流程,如下所示;

capturePhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, TAKE_PHOTO);
            }
        });

然后

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case TAKE_PHOTO:
                if (resultCode == Activity.RESULT_OK) {
                    final Bitmap bitmap = (Bitmap) data.getExtras().get("data");
                    imageView.setImageBitmap(bitmap);
                }
                break;
        }
    }

【讨论】:

    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多