使用android 4.4时,闪光灯相机无法在nexus S和nexus 5中工作

时间:2013-12-17 13:08:53

标签: android flash service camera

在Nexus S和Nexus 5设备上启动相机时遇到问题。

在控制台中:

  E/SecCamera? ERR(int android::SecCamera::getPreview()):Start Camera Device Reset
  E/CameraHardwareSec? ERR(int android::CameraHardwareSec::previewThread()):Fail on SecCamera-   >getPreview()
  E/SecCamera? initCamera: m_cam_fd(42), m_jpeg_fd(0)
  E/SecCamera? initCamera: m_cam_fd2(43)
  E/CameraHardwareSec? preview window is NULL!

使用以下

         Variable declaration:
             public Camera cam;
             public android.hardware.Camera.Parameters p;

         Code:
            if(cam==null){
                cam = Camera.open();
                p = cam.getParameters();
                p.setFlashMode(android.hardware.Camera.Parameters.FLASH_MODE_TORCH);
                cam.setParameters(p);
                cam.startPreview();
            }
            else{
                p.setFlashMode(android.hardware.Camera.Parameters.FLASH_MODE_OFF);
                cam.setParameters(p);
                cam.release();
                cam = null;
            }

     This kind of service understands and implements SensorEventListener.

这适用于下面带有软件4.4的多个设备。我该怎么办?请。

1 个答案:

答案 0 :(得分:2)

我的解决方案是: 在我的活动中,为相机实现SurfaceHolder.Callback和setPreviewDisplay是一个SurfaceHolder。在布局中添加SurfaceView。 我的代码:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    this.surfaceView = ((SurfaceView) findViewById(R.id.surfaceview));
    this.surfaceHolder = this.surfaceView.getHolder();
    this.surfaceHolder.addCallback(this);
    this.surfaceHolder.setType(3);

}

然后:

    @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        this.camera.setPreviewDisplay(holder);
        return;
    } catch (IOException localIOException) {
        localIOException.printStackTrace();
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}
希望对你有用。 对不起,如果我的英语不正确。