Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在Nexus 7平板电脑中打开相机大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 @L_197_0@中开发了一个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;
            }

其中c是Camera的对象.

它在除Nexus 7平板电脑之外的其他手机中运行良好.在Nexus 7中,代码在所有情况下抛出异常,除了最后一个,即c = Camera.open();,但对象c仍为null.

这是堆栈跟踪

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)

所以我不能用它来捕捉图像.
有什么办法吗

谢谢…

解决方法

@H_675_20@ 在Nexus 7上使用以下代码时:
int cameraId = CameraInfo.CAMERA_FACING_FRONT;
但是,如您所见,cameraId为1,使用1作为参数会导致错误.
我发现使用0代替1可以工作,但每次使用后必须释放相机,所以我继续调用Camera.open(cameraId).release();
我意识到这很难看,但它似乎解决了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();
     }

大佬总结

以上是大佬教程为你收集整理的android – 在Nexus 7平板电脑中打开相机全部内容,希望文章能够帮你解决android – 在Nexus 7平板电脑中打开相机所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。