在调试器中运行它我看到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;
}
}
答案 0 :(得分:1)
这一行:
CameraInfo info = new CameraInfo();
不获取当前的摄像头配置。它只是一个空的默认构造函数。获得准确的CameraInfo对象的唯一方法是Camera#getCameraInfo()。
你得到一个空摄像头的原因是因为默认的facing
是0.所以,它进入第一个块,尝试open()
返回null,因为:
如果设备没有后置摄像头,则返回null。
您可以从一开始就致电getNumberOfCameras()
,看看有多少台相机。然后打开一个并检查它CameraInfo
以查看它面向哪个方向。
但是,如果您在默认情况下始终需要后置摄像头(考虑到您的代码,这似乎很可能),只需将检查移至facing
并在open()
上检查是否为空。