当前位置: 首页 > 知识库问答 >
问题:

Android:相机捕获照片后无法调用onActivityResult()方法

堵泽宇
2023-03-14

在我的应用程序中,当我通过以下方式调用相机意图时:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);

它不调用onActivityResult()方法。

我的应用程序中的问题是,有时它调用这个方法,但在捕获照片后的一段时间,它再次来到照片捕获屏幕。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
    String fileName = null;
    try {
        if (requestCode == CAMERA_REQUEST) {
            roughBitmap = (Bitmap) data.getExtras().get("data");
            final ContentResolver cr = getContentResolver();
            final String[] p1 = new String[] {
                MediaStore.Images.ImageColumns._ID,
                    MediaStore.Images.ImageColumns.DATE_TAKEN };
            Cursor c1 = cr.query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null,
                        null, p1[1] + " DESC");
                if (c1.moveToFirst()) {
                    String uristringpic = "content://media/external/images/media/"
                            + c1.getInt(0);
                    newuri = Uri.parse(uristringpic);
                    // Log.i("TAG", "newuri "+newuri);
                    snapName = getRealPathFromURI(newuri);
                    Uri u = Uri.parse(snapName);

                    File f = new File("" + u);
                    fileName = f.getName();
                }
                c1.close();

                  setImageParameter();

            }
        } catch (NullPointerException e) {

        }
        System.out.println("*** End of onActivityResult() ***");
    }

public void setImageParameter() {
    // decode full image
    roughBitmap = BitmapFactory.decodeFile(snapName);
    // calc exact destination size
    Matrix matrix = new Matrix();
    RectF inRect = new RectF(0, 0, roughBitmap.getWidth(),
            roughBitmap.getHeight());
    // RectF outRect = new RectF(0, 0, dstWidth, dstHeight);
    RectF outRect = new RectF(0, 0, 640, 480);
    matrix.setRectToRect(inRect, outRect, Matrix.ScaleToFit.CENTER);
    float[] values = new float[9];
    matrix.getValues(values);
    // resize bitmap
    resizedBitmap = Bitmap.createScaledBitmap(roughBitmap,
            (int) (roughBitmap.getWidth() * values[0]),
            (int) (roughBitmap.getHeight() * values[4]), true);

    paint = new Paint();
    paint.setColor(Color.GREEN);
    paint.setTextSize(16);
    paint.setTextAlign(Paint.Align.LEFT);

    Canvas canvas = new Canvas(resizedBitmap);

    canvas.drawText(String.valueOf(lat), resizedBitmap.getWidth() - 290, resizedBitmap.getHeight() - 50, paint);
    canvas.drawText(String.valueOf(lng), resizedBitmap.getWidth() - 140, resizedBitmap.getHeight() - 50, paint);
    if (!editTextRoadName.getText().toString().equalsIgnoreCase("")) {
        canvas.drawText(editTextRoadName.getText().toString(), resizedBitmap.getWidth() - 290, resizedBitmap.getHeight() - 30, paint);
    }
    canvas.drawText(new DateClass().getSysDateTimeForPhoto(), resizedBitmap.getWidth() - 290, resizedBitmap.getHeight() - 10, paint);



    if (nFinalOrientation == 1) {
        matrix.postRotate(90);
    } else {
        matrix.postRotate(0);
    }


    rotatedBitmap = Bitmap.createScaledBitmap(resizedBitmap,
            (int) (resizedBitmap.getWidth() * values[0]),
            (int) (resizedBitmap.getHeight() * values[4]), true);

    if (booleanPhotoFlag) {
        booleanPhotoFlag = false;
        photoBitmap = rotatedBitmap.copy(Bitmap.Config.ARGB_8888, true);
        imageViewPhoto.setImageBitmap(photoBitmap);

    } else {
        landmarkBitmap = rotatedBitmap.copy(rotatedBitmap.getConfig(), rotatedBitmap.isMutable() ? true : false);
        imageViewLocationPhoto.setImageBitmap(landmarkBitmap);
    }

}

共有1个答案

周博达
2023-03-14

我已经创建了一个相机库项目,你可以用这个来拍照。我建议你用这个图书馆拍照

编辑2:

请尝试在protected void onActivityResult(int requestCode,int resultCode,Intent data)super.onActivityResult(requestCode,resultCode,data)之间放置一个日志,以查看是否调用了该方法,如果调用了该方法,则检查返回的值。并且onActivityResult不是由您的活动调用的,而是由调用活动调用的。在本例中是mediastore.action_image_captureintent,因此您的onActivityResult必须由调用活动的setresult()调用。但我希望你不要试图通过这里的意图传递位图

 类似资料:
  • 在lollipop和更高版本中从相机捕获图像时,在OnActivityResult上获得结果数据null。 launchCamera(); getOutputMediaFileUri() getOutputMediaFile()

  • 问题内容: 我正在使用自定义相机应用程序,本教程使用的是iOS 10弃用的AVCaptureStillImageOutput。我已经设置了相机,现在只能使用如何拍照了。 这是我有相机的全景 这是我需要帮助的地方 我已经在这里回答了如何使用AVCapturePhotoOutput,但是我不明白如何在该代码中合并该代码,因为它涉及到声明一个新类。 问题答案: 你快到了。 查看 文档以获取更多帮助。 这

  • 我正在开发Xamrin表单应用程序。在它里面,我正试图用一台相机拍摄多张照片,目的相同。不使用任何包? 为此,我跟随这个链接摄像机 在创建结束时 在这里,我只得到一张照片点击相机按钮,但我想捕捉更多的照片,我想要它的文件路径 在OnActivityResult中 但是也许它有一些限制,比如我们不能一次拍摄多张照片?有人知道如何捕获多张照片并将其绑定到listview吗?

  • 本文向大家介绍Android调用系统照相机拍照与摄像的方法,包括了Android调用系统照相机拍照与摄像的方法的使用技巧和注意事项,需要的朋友参考一下 前言   在很多场景中,都需要用到摄像头去拍摄照片或视频,在照片或视频的基础之上进行处理。但是Android系统源码是开源的,很多设备厂商均可使用,并且定制比较混乱。一般而言,在需要用到摄像头拍照或摄像的时候,均会直接调用系统现有的相机应用,去进行

  • 这是UnityBridge的代码,我正在使用它在Unity和原生Android之间架桥。 Unity和android之间的桥梁是成功的。当我从Unity调用openCamera方法时,相机应用程序打开,我可以拍摄照片。拍照后,图像保存到内存中的Demo文件夹中。直到这一步没有问题,但保存照片后,应用程序的力量关闭。我从cmd获得的日志如下所示:我认为在onActivityResult中获得的意图数

  • 本文向大家介绍Android 系统相机拍照后相片无法在相册中显示解决办法,包括了Android 系统相机拍照后相片无法在相册中显示解决办法的使用技巧和注意事项,需要的朋友参考一下 Android 系统相机拍照后相片无法在相册中显示解决办法 目前自己使用发送广播实现了效果  解决方法: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!