2014-03-05 104 views
-3

我的android相機在真實設備上測試時無法拍攝照片並使用此類代碼觸發閃光燈,沒有發生錯誤。爲什麼是這個原因?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) { 
     } 
    }; 
    };} 

您的幫助非常感謝! 非常感謝。

+0

Xml file:

+0

爲什麼downvote?告訴我爲什麼? –

+0

'沒有錯誤發生'。沒有日誌可以捕獲到多個異常,所以可能只是忽略這些錯誤。而且,你的'休息'似乎不合適。在前置攝像頭的情況下,您永遠不會調用'startPreview'或'setPreviewDisplay'。 – njzk2

回答

1

假設它是具有閃光燈的後置相機,而不是前置相機。然後有類似

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 

    }