有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Android中尝试拍照时java失败

嗨,我正在做一个API来控制Android中的摄像头。我正在执行获取图像的功能,但在尝试拍照时,logcat中出现以下错误:

06-18 09:25:44.319: E/AndroidRuntime(2918): FATAL EXCEPTION: main
06-18 09:25:44.319: E/AndroidRuntime(2918): Process: org.gradiant.democamera, PID: 2918
06-18 09:25:44.319: E/AndroidRuntime(2918): java.lang.IllegalStateException: Could not execute method of the activity
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.view.View$1.onClick(View.java:3823)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.view.View.performClick(View.java:4438)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.view.View$PerformClick.run(View.java:18422)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.os.Handler.handleCallback(Handler.java:733)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.os.Handler.dispatchMessage(Handler.java:95)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.os.Looper.loop(Looper.java:136)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.app.ActivityThread.main(ActivityThread.java:5001)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invokeNative(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invoke(Method.java:515)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at dalvik.system.NativeStart.main(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918): Caused by: java.lang.reflect.InvocationTargetException
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invokeNative(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invoke(Method.java:515)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.view.View$1.onClick(View.java:3818)
06-18 09:25:44.319: E/AndroidRuntime(2918):     ... 11 more
06-18 09:25:44.319: E/AndroidRuntime(2918): Caused by: java.lang.RuntimeException: takePicture failed
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.hardware.Camera.native_takePicture(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.hardware.Camera.takePicture(Camera.java:1245)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at 安卓.hardware.Camera.takePicture(Camera.java:1190)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at org.gradiant.camara.CameraAcquisition.GetImage(CameraAcquisition.java:146)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at org.gradiant.democamera.MainActivity.getFrame(MainActivity.java:30)
06-18 09:25:44.319: E/AndroidRuntime(2918):     ... 14 more

这是我执行此操作的代码:

public void GetImage() {

        mCamera = StartCapture();
        mCamera.startPreview();
        mCamera.takePicture(null, null, new PictureCallback() {

            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                // TODO Auto-generated method stub

            }
        });

    }

    public Camera StartCapture() {

        int cameraCount = 0;
        Camera cam = null;
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        cameraCount = Camera.getNumberOfCameras();

        for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
            Camera.getCameraInfo(camIdx, cameraInfo);
            if (cameraInfo.facing == camera_used) {
                try {
                    cam = Camera.open(camIdx);
                    安卓.hardware.Camera.CameraInfo info = new 安卓.hardware.Camera.CameraInfo();
                    安卓.hardware.Camera.getCameraInfo(camIdx, info);
                    int rotation = ((Activity) context_class)
                            .getWindowManager().getDefaultDisplay()
                            .getRotation();
                    int degrees = 0;
                    switch (rotation) {
                    case Surface.ROTATION_0:
                        degrees = 0;
                        break;
                    case Surface.ROTATION_90:
                        degrees = 90;
                        break;
                    case Surface.ROTATION_180:
                        degrees = 180;
                        break;
                    case Surface.ROTATION_270:
                        degrees = 270;
                        break;
                    }
                    int result;
                    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                        result = (info.orientation + degrees) % 360;
                        result = (360 - result) % 360; // compensate the mirror
                    } else { // back-facing
                        result = (info.orientation - degrees + 360) % 360;
                    }
                    cam.setDisplayOrientation(result);

                    // other options, as resolution, format, etc
                    Camera.Parameters params = mCamera.getParameters();
                    mCamera.setParameters(params);

                } catch (RuntimeException e) {
                }
            }
        }

        return cam;

    }

问题在哪里?我做错了什么

谢谢

编辑:

根据whith de comments,以下是两条冲突线:

在主要活动中:

camera.GetImage();

在调用方法时,以及在方法中:

mCamera.takePicture(null, null, new PictureCallback()

共 (0) 个答案