简体   繁体   English

在Nexus 7平板电脑中打开相机

[英]Open Camera in Nexus 7 tablet

I have developed a Camera application in android. 我在android中开发了一个Camera应用程序。 It captures image using a surface view. 它使用表面视图捕获图像。 Below is the code that I used to open camera 下面是我用来打开相机的代码

try {
            // attempt to get a Front Camera instance
            c = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out
                    .println("fail to connect to Front Camera");
        }
        if (c == null) {
            try {
                // attempt to get a Back Camera instance
                c = Camera.open(1);
            } catch (Exception e) {
                // TODO: handle exception
                System.out
                        .println("fail to connect to Camera   with      id   =   1");
            }
        }
        if (c == null) {
            try {
                // attempt to get a Back Camera instance
                c = Camera.open(0);
            } catch (Exception e) {
                // TODO: handle exception
                System.out
                        .println("fail to connect to Camera   with      id   =   0");
            }
        }
        if (c == null) {
            try {
                // attempt to get a Back Camera instance
                c = Camera.open();
            } catch (Exception e) {
                // TODO: handle exception
                System.out
                        .println("fail to connect to Back Camera");
                return c;
            }

Where c is an object of Camera. 其中c是Camera的对象。

It works fine in other phones except Nexus 7 Tablet. 它在除Nexus 7平板电脑之外的其他手机中运行良好。 In Nexus 7, the code throws exception in all cases except the last one ie c = Camera.open(); 在Nexus 7中,除最后一个外,代码抛出异常,即c = Camera.open(); , but still the object c is null . ,但仍然对象cnull

Here is the stack trace 这是堆栈跟踪

11-22 12:36:57.559 W/System.err(7621): java.lang.NullPointerException
11-22 12:36:57.559 W/System.err(7621): at 

com.MyPackage.OpenCamera.getFrontCameraInstance(OpenCamera.java:238)
11-22 12:36:57.559 W/System.err(7621): at 

com.MyPackage.OpenCamera.onCreate(OpenCamera.java:123)
11-22 12:36:57.559 W/System.err(7621): at 

android.app.Activity.performCreate(Activity.java:5104)
11-22 12:36:57.559 W/System.err(7621): at 

android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
11-22 12:36:57.559 W/System.err(7621): at 

android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
11-22 12:36:57.559 W/System.err(7621): at 

android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
11-22 12:36:57.559 W/System.err(7621): at 

android.app.ActivityThread.access$600(ActivityThread.java:141)
11-22 12:36:57.559 W/System.err(7621): at android.app.ActivityThread

$H.handleMessage(ActivityThread.java:1234)
11-22 12:36:57.559 W/System.err(7621): at 

android.os.Handler.dispatchMessage(Handler.java:99)
11-22 12:36:57.559 W/System.err(7621): at android.os.Looper.loop

(Looper.java:137)
11-22 12:36:57.559 W/System.err(7621): at android.app.ActivityThread.main

(ActivityThread.java:5039)
11-22 12:36:57.559 W/System.err(7621): at 

java.lang.reflect.Method.invokeNative(Native Method)
11-22 12:36:57.559 W/System.err(7621): at java.lang.reflect.Method.invoke

(Method.java:511)
11-22 12:36:57.559 W/System.err(7621): at 

com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run

(ZygoteInit.java:793)
11-22 12:36:57.559 W/System.err(7621): at 

com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-22 12:36:57.559 W/System.err(7621): at dalvik.system.NativeStart.main

(Native Method)
11-22 12:36:57.559 I/System.out(7621): Error in setting Parameter
11-22 12:36:57.609 I/ActivityManager(480): Displayed 
11-22 12:36:57.679 W/System.err(7621): at 

android.location.Geocoder.getFromLocation(Geocoder.java:136)
11-22 12:36:57.679 W/System.err(7621): at com.MyPackage.OpenCamera.

$MyTimmer$1.run(OpenCamera.java:336)
11-22 12:36:57.679 W/System.err(7621): java.lang.NullPointerException
11-22 12:36:57.679 W/System.err(7621): at com.MyPackage.OpenCamera.

$MyTimmer$1.run(OpenCamera.java:344)

So I can't use it to capture image. 所以我不能用它来捕捉图像。 Any solution??? 有什么办法吗

Thanks... 谢谢...

When using the following code on the Nexus 7: int cameraId = CameraInfo.CAMERA_FACING_FRONT; 在Nexus 7上使用以下代码时:int cameraId = CameraInfo.CAMERA_FACING_FRONT; The cameraId is 1, however, as you have seen, using 1 as the parameter results in an error. 但是,如您所见,cameraId为1,使用1作为参数会导致错误。 I have found that using 0 instead of 1 works but the camera must be released after each use so I go ahead and call Camera.open(cameraId).release(); 我发现使用0代替1可以工作,但每次使用后必须释放相机,所以我继续调用Camera.open(cameraId).release(); I realize this is ugly but it seems to solve the issue with the Nexus 7. 我意识到这很难看,但它似乎解决了Nexus 7的问题。

    int cameraId = -1;
    boolean errorFound = false;
    boolean hasFeatCamera = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);

    if (hasFeatCamera) {

            try{
                 cameraId = CameraInfo.CAMERA_FACING_BACK;
                 Camera.open(cameraId).release();
                }catch(Exception e){
                    Camera.open(0).release();
                }

    } else if(CameraInfo.CAMERA_FACING_FRONT>-1){

        try{
         cameraId = CameraInfo.CAMERA_FACING_FRONT;
         Camera.open(cameraId).release();
        }catch(Exception e){
            errorFound = true;

        }

        if(errorFound){
            try{
                Camera.open(0).release(); // Put in for Nexus 7 as  CameraInfo.CAMERA_FACING_FRONT= 1 but it only loads if the id is actually 0
                cameraId = 0;
            }catch(Exception e){
                cameraId = -1;
            }
        }
    }

    if(cameraId<0){
        Toast.makeText(this, "No camera found.",
                    Toast.LENGTH_LONG).show();
     } 

A bit late, but maybe it helps someone. 有点晚了,但也许有人帮忙。 I had the exact same problem and could NOT get the Nexus 7 camera to work with any index supplied to getCamera(idx). 我有完全相同的问题,无法让Nexus 7相机与提供给getCamera(idx)的任何索引一起使用。

I installed a camera "Kamera Nexus 7" app from the playstore. 我从Playstore安装了一个相机“Kamera Nexus 7”应用程序。 I didn't have any camera app after a reset/update. 重置/更新后我没有任何相机应用程序。 This app worked and after i used it once, i could get the cam by using Camera.getCamera(0); 这个应用程序工作,我使用它一次后,我可以通过使用Camera.getCamera(0)得到凸轮;

So maybe there is an additional "unlock requirement" that is not covered in the answers here? 那么也许这里的答案中没有涉及额外的“解锁要求”? (They did not work for me, before installing the app) (在安装应用程序之前,它们对我不起作用)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM