相机模拟器“面对”表演奇怪

时间:2013-10-02 15:13:47

标签: android eclipse android-emulator android-camera

在调试器中运行它我看到info.facing == 0.这意味着它是一个背面摄像头。

当我尝试实例化Camrea对象时,我得到null。

在模拟器上

我将设备设置为背面camrea禁用并启用前置摄像头。为什么设备认为存在背面凸轮?

我正在使用Eclipse ADT。

这是我的方法。我从未到达第二个循环。 getCamreaInstance返回的c为null。

public static Camera getCameraInstance(){
        Camera c = null;

        CameraInfo info = new CameraInfo();
        if (info.facing == CameraInfo.CAMERA_FACING_BACK){

            //Calling Camera.open() throws an exception if the camera is already in use by another application, so we wrap it in a try block.
            //Failing to check for exceptions if the camera is in use or does not exist will cause your application to be shut down by the system.
            try {
                c = Camera.open();
            }
            catch (Exception e){
                // Camera is not available (in use or does not exist)
            }
            return c;
        }
        //we want the back facing, if we cant get that then we try and get the front facing
        else if (info.facing == CameraInfo.CAMERA_FACING_FRONT){
            c = Camera.open(Camera.getNumberOfCameras()-1); //i should test and see if -1 is a valid value in the case that a device has no camera
            return c;
        }
        else{
            //there are no cameras, so we need to account for that since 'c' will be null
            return c;
        }

    }

1 个答案:

答案 0 :(得分:1)

这一行:

CameraInfo info = new CameraInfo();

获取当前的摄像头配置。它只是一个空的默认构造函数。获得准确的CameraInfo对象的唯一方法是Camera#getCameraInfo()

你得到一个空摄像头的原因是因为默认的facing是0.所以,它进入第一个块,尝试open()返回null,因为:

  

如果设备没有后置摄像头,则返回null。

您可以从一开始就致电getNumberOfCameras(),看看有多少台相机。然后打开一个并检查它CameraInfo以查看它面向哪个方向。

但是,如果您在默认情况下始终需要后置摄像头(考虑到您的代码,这似乎很可能),只需将检查移至facing并在open()上检查是否为空。