相机意图不返回片段不调用活动结果

时间:2018-04-20 08:50:12

标签: android android-fragments android-camera-intent onactivityresult

我试图打开相机拍摄图像,以字节数组存储,然后在片段上显示图像。

相机正在打开并拍摄照片,但是当您点击勾选时它只会再次显示相机。

我检查了活动结果并且没有被调用。我拥有所有正确的权限设置。

我在这里尝试过其他答案,但没有成功。

以下是我在片段中打开相机的方法:

{{1}}

这是片段中的onActivityResult:

{{1}}

修改
添加requestPermission:

{{1}}

编辑2:
将onActivityResult添加到Main Activity(片段的主机活动)但没有更改:

{{1}}

3 个答案:

答案 0 :(得分:0)

如果你在片段中调用openCamera方法,你需要检查这个

onActivityResult is not being called in Fragment

答案 1 :(得分:0)

super删除onActivityResult()

删除此行 super.onActivityResult(requestCode, resultCode, data);

super将继承父类onActivityResult

答案 2 :(得分:0)

您需要更改onActivityResult():

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

        if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
            // Do something after user returned from app settings screen
            openCamera();
        } else if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {

            if (resultCode == Activity.RESULT_OK) {
                Bitmap bmp = (Bitmap) data.getExtras().get("data");
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                transactionImageLocationByteArray = stream.toByteArray();

                // Load the image into the imageview
                Glide.with(getActivity()).asBitmap().load(transactionImageLocationByteArray).into(addTransactionCameraButon);

            } else if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(getActivity(), "Image Capture Cancelled", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getActivity(), "Image Capture Failed", Toast.LENGTH_SHORT).show();
            }
        }
    }

修改:将以下代码添加到您的活动的onActivityResult()方法中。

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.yourFragmentId);
        fragment.onActivityResult(requestCode, resultCode, data);

}