无意图捕获图像,在不同设备上提供不同的输出

raj*_*ara 16 android android-camera

我的要求既不是显示相机预览,也不是使用相机意图进行图像捕捉.

我找到了一种适用于我的第一个测试设备(Galaxy tab 7")的方法.

我的CaptureImage功能如下

private void CaptureImage() {
        int FrontCameraFound = getCameraID();
        if (FrontCameraFound != -1) {
            mCamera = Camera.open(FrontCameraFound);

            parameters = mCamera.getParameters();

            mCamera.setParameters(parameters);
            mCamera.startPreview();

            Camera.PictureCallback mCall = new Camera.PictureCallback() {
                @Override
                public void onPictureTaken(byte[] data, Camera camera) {

                    bmp = BitmapFactory.decodeByteArray(data, 0, data.length);

                    // set bitmap tp image view just to check 
                    // if image capture proper, testing purpose
                    iv_image.setImageBitmap(bmp);

                    mCamera.stopPreview();
                    mCamera.release();
                    mCamera = null;
                }
            };
            mCamera.takePicture(null, null, mCall);
        }
    }
Run Code Online (Sandbox Code Playgroud)

getCameraID功能如下

private int getCameraID() {
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();

    for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); camIdx++) {
        Camera.getCameraInfo(camIdx, cameraInfo);
        // for capture image from back camera
        // If want to capture from front 
        // then change it to CAMERA_FACING_FRONT
        if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
            try {
                return camIdx;
            } catch (RuntimeException e) {

            }
        }
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

现在,我面临着在不同设备上成功运行代码的困难.

  • 三星Galaxy S +(2.3.6):前置摄像头始终返回绿色图像,但编码后置摄像头工作正常.
  • 三星Galaxy Nexus(4.1):编码不起作用Front和后置摄像头都没有"takePicture"失败.
  • LG Optimus Net(2.3.4):只有后置摄像头才能正常工作.
  • 三星Galaxy Tab 7"(2.3.3):两款相机都能正常工作.
  • 摩托罗拉Xoom(3.1):两款相机都工作​​正常.

三星Galaxy Nexus的Logcat:

09-21 09:37:42.125: E/AndroidRuntime(4647): Caused by: java.lang.RuntimeException: takePicture failed
09-21 09:37:42.125: E/AndroidRuntime(4647):     at android.hardware.Camera.native_takePicture(Native Method)
09-21 09:37:42.125: E/AndroidRuntime(4647):     at android.hardware.Camera.takePicture(Camera.java:1061)
09-21 09:37:42.125: E/AndroidRuntime(4647):     at android.hardware.Camera.takePicture(Camera.java:1006)
09-21 09:37:42.125: E/AndroidRuntime(4647):     at fortyonepost.com.pwop.TakePictureDemoActivity.CaptureImage(TakePictureDemoActivity.java:63)
09-21 09:37:42.125: E/AndroidRuntime(4647):     at fortyonepost.com.pwop.TakePictureDemoActivity.onCreate(TakePictureDemoActivity.java:36)
09-21 09:37:42.125: E/AndroidRuntime(4647):     at android.app.Activity.performCreate(Activity.java:5008)
09-21 09:37:42.125: E/AndroidRuntime(4647):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
09-21 09:37:42.125: E/AndroidRuntime(4647):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
Run Code Online (Sandbox Code Playgroud)

我无法检查每个设备的代码,我只是在5个设备上测试我的代码而2个设备导致问题,所以有没有任何标准方法从相机获取图像而没有意图和预览.

请注意,我在清单中包含并将最低sdk版本设置为9

更新:takePicture FailedCamera.java类中的行号1061的4.1 Nexus Galaxy 中,这里是类链接,它给了我native_takePicture(msgType); function in Camera.java确实抛出的信息

raj*_*ara 3

经过多次搜索,我发现相机预览是必要的,我想知道我的代码在某些设备上如何工作,即使它有问题。

无论如何解决办法是,

我们需要相机预览保持在表面视图上,我们可以将该表面视图隐藏在任何其他视图后面,我在框架布局中获取表面视图(我知道它已被弃用),在它上面我获取图像视图,对于表面视图我只采取80 * 80 dp 表面视图,因为像 30*30 dp 这样的小表面视图不起作用,并且再次出现错误。