【问题标题】:No callback for startActivityForResult in case of MediaStore.INTENT_ACTION_VIDEO_CAMERA在 MediaStore.INTENT_ACTION_VIDEO_CAMERA 的情况下 startActivityForResult 没有回调
【发布时间】:2019-10-23 12:42:17
【问题描述】:

这种情况是当用户选择相机时,他可以灵活地捕捉图像或录制视频,并且用户应该能够在自己的应用程序中显示相同的内容。

在这种情况下,使用了MediaStore.INTENT_ACTION_VIDEO_CAMERA 意图,但在捕获图像或录制视频的情况下都没有回调。

Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
startActivityForResult(intent, VIDEO_CAMERA);

获取结果,代码如下:-

@Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_CANCELED) {
            return;
        }

        if (resultCode == RESULT_OK) {
            if (requestCode == VIDEO_CAMERA) {
                   Uri uri = data.getData();
            }
        }
    }

【问题讨论】:

  • 你确定吗?你调试过吗?您也尝试过 Intent.EXTRA_INITIAL_INTENTS 吗?
  • 否,但它有助于捕捉图像和录制视频吗?
  • 是的。会的!!
  • 你能帮我写一些代码吗?
  • 我现在不能编码。但后来我可能是

标签: android android-camera-intent android-video-record


【解决方案1】:

要启动相机并在onActivityResult() 中返回结果,您应该使用MediaStore.ACTION_IMAGE_CAPTURE 创建一个Intent:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

同样,要捕获视频,请使用MediaStore.ACTION_VIDEO_CAPTURE

【讨论】:

  • 如果可能的话,我想以一个单一的意图来做。
  • 请查看这个答案:stackoverflow.com/a/46238195/2068732
  • 我之前有过这个例子并尝试过这样做,但它显示错误。但我最终遇到了一个使用相同逻辑但方式不同的示例,这对我有用。
  • 那很好。你最初的问题是如何从相机中获取结果,我给了你一个答案。请考虑接受。
【解决方案2】:

终于找到了解决办法,如下:-

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
Intent chooserIntent = Intent.createChooser(takePictureIntent, "Capture Image or Video");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{takeVideoIntent});
startActivityForResult(chooserIntent,VIDEO_CAMERA);

最后在onActivityResult收到回调,我通过这种方式得到了uri:-

@Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_CANCELED) {
            return;
        }

        if (resultCode == RESULT_OK) {
            if (requestCode == VIDEO_CAMERA) {
                    Uri uri;
                    if (data == null || data.getData() == null) {
                        Bitmap bitmap (Bitmap)data.getExtras().get("data");
                        // TODO:Get uri from bitmap for image
                            uri = getImageUri(context, bitmap);
                    } else {
                        //Get uri for video
                        uri = data.getData();
                    }   


            }
       }
}

【讨论】:

    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2016-06-03
    • 2012-06-10
    • 2016-04-08
    • 2021-12-05
    • 2018-05-29
    相关资源
    最近更新 更多