我得到例外java.lang.RuntimeException: Fail to get camera info
在Camera.getCameraInfo(cameraId,info);
我的代码是:
public void surfaceCreated(SurfaceHolder holder) {
int cameraId = -1;
for(int i=0;i<Camera.getNumberOfCameras();i++){
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(cameraId,info);
if(info.facing== Camera.CameraInfo.CAMERA_FACING_FRONT){
cameraId = i;
break;
}
}
camera = Camera.open(cameraId);
}
并且清单也有:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.front" />
<uses-feature android:name="android.hardware.camera.autofocus" />
缺少什么,我该如何解决? 欢迎任何帮助。
答案 0 :(得分:1)
您正在获得异常,因为您将cameraId初始化为-1,这是错误的。 并传递它以获取相机信息
Camera.getCameraInfo(cameraId,info);
将cameraId初始化为0以摆脱异常。
答案 1 :(得分:1)
我改变了方法;之前我正在实施SurfaceHolder.Callback
,但现在我创建了它的对象。
我将代码从SurfaceCreated
移到onResume()
public void onResume() {
super.onResume();
for(int i=0;i<Camera.getNumberOfCameras();i++){
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i,info);
if(info.facing== Camera.CameraInfo.CAMERA_FACING_FRONT){
cameraId = i;
break;
}
}
camera=Camera.open(cameraId);
camera.startPreview();
}
回调的对象就像:
SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
// no-op -- wait until surfaceChanged()
}
public void surfaceChanged(SurfaceHolder holder,
int format, int width,
int height) {
Camera.Parameters parameters=camera.getParameters();
Camera.Size size=getBestPreviewSize(width, height,
parameters);
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if (size!=null) {
parameters.setPreviewSize(size.width, size.height);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
cameraConfigured=true;
}
camera.startPreview();
}
public void surfaceDestroyed(SurfaceHolder holder) {
// no-op
}
};
这解决了我的问题。
答案 2 :(得分:0)
此方法将返回前摄像头ID:
private int getFrontCameraId(){
int camId = -1;
int numberOfCameras = Camera.getNumberOfCameras();
Camera.CameraInfo ci = new Camera.CameraInfo();
for(int i = 0;i < numberOfCameras;i++){
Camera.getCameraInfo(i,ci);
if(ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
camId = i;
}
}
return camId;
}
在此处传递此ID:camera=Camera.open(getFrontCameraId());