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

在真实设备上测试时,我的android摄像头无法使用这种代码拍照和启动闪光灯,没有出现错误。为什么会这样

 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循环无法到达后向摄像头,这可能是带有闪光灯的摄像头。