Android 安卓摄像头不';行不通
在真实设备上测试时,我的android摄像头无法使用这种代码拍照和启动闪光灯,没有出现错误。为什么会这样Android 安卓摄像头不';行不通,android,android-camera,Android,Android Camera,在真实设备上测试时,我的android摄像头无法使用这种代码拍照和启动闪光灯,没有出现错误。为什么会这样 public class CameraShooting implements SurfaceHolder.Callback { Context context; Camera camera; CameraInfo camerainfo; Camera.Parameters paras; Surfac
public class CameraShooting implements SurfaceHolder.Callback {
Context context;
Camera camera;
CameraInfo camerainfo;
Camera.Parameters paras;
SurfaceView surfaceview;
SurfaceHolder surfaceholder;
PictureCallback picturecallback;
public CameraShooting (Context context){
this.context = context;
}
public void cameraStart(){
if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
surfaceview = new SurfaceView(context);
surfaceholder = surfaceview.getHolder();
surfaceholder.addCallback(this);
};
};
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
int numbersofCamera = camera.getNumberOfCameras();
int cameraID = 0;
camerainfo = new CameraInfo();
for(int i =1; i < numbersofCamera; i++){
camera.getCameraInfo(i, camerainfo);
if (camerainfo.facing == CameraInfo.CAMERA_FACING_FRONT){
cameraID = i;
camera = Camera.open(i);
break;
}
if(camerainfo.canDisableShutterSound){
camera.enableShutterSound(true);
}
paras = camera.getParameters();
paras.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
try {
camera.setPreviewDisplay(surfaceholder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
camera.setParameters(paras);
camera.startPreview();
camera.takePicture(null, null, mPicture);
Toast.makeText(context, "Picture taken", Toast.LENGTH_SHORT).show();
};
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = new File(context.getFilesDir(), "picture taken");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
};
};}
公共类CameraShooting实现SurfaceHolder.Callback{
语境;
摄像机;
Cameronfo Cameronfo;
摄像机参数,第2-3段;
表面视图表面视图;
浮雕浮雕;
PictureCallback PictureCallback;
公共摄像机拍摄(上下文){
this.context=上下文;
}
公共无效cameraStart(){
if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE\u摄像头)){
surfaceview=新的surfaceview(上下文);
surfaceholder=surfaceview.getHolder();
surfaceholder.addCallback(this);
};
};
@凌驾
公共无效表面更改(表面文件夹持有者,整型格式,整型宽度,
整数高度){
}
@凌驾
已创建的公共空白表面(表面持有人){
int numbersofCamera=camera.getnumbersofcameras();
int=0;
camerRainfo=新的camerRainfo();
对于(int i=1;i
非常感谢你的帮助!
非常感谢。假设是后向摄像头有闪光灯,而不是前向摄像头。那就吃点
for(int i =1; i < numbersofCamera; i++){
camera.getCameraInfo(i, camerainfo);
if (camerainfo.facing == CameraInfo.CAMERA_FACING_FRONT){
continue; //NOT break;
cameraID = i;
camera = Camera.open(i);
}
// ... etc, etc
}
for(int i=1;i
.Xml文件:为什么要否决?告诉我原因?
没有发生错误
。您在没有日志的情况下捕获了多个异常,因此可能忽略这些错误。此外,您的中断代码>似乎不合适。对于前向摄像头,您从未调用过startPreview
,或setPreviewDisplay
。为什么“对于前向摄像头,您从未调用startPreview或setPreviewDisplay”?中断不合适。for循环无法到达后向摄像头,这可能是带有闪光灯的摄像头。