Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
火炬不工作时的Android flash模式_Android_Android Camera - Fatal编程技术网

火炬不工作时的Android flash模式

火炬不工作时的Android flash模式,android,android-camera,Android,Android Camera,我使用相机API和闪光灯模式作为火炬,但在拍摄一张照片后,闪光灯关闭。我如何再次打开闪光灯?我使用android 2.3,如何使用闪光灯模式作为火炬 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // <15> camera = Camera.open(); params = camera.getParameters(); List<Size>

我使用相机API和闪光灯模式作为火炬,但在拍摄一张照片后,闪光灯关闭。我如何再次打开闪光灯?我使用android 2.3,如何使用闪光灯模式作为火炬

      public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // <15>
  camera = Camera.open();
  params = camera.getParameters();
  List<Size> sizes = params.getSupportedPictureSizes();
  Camera.Size size = sizes.get(0);
  params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
  params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
       params.setSceneMode(Camera.Parameters.SCENE_MODE_LANDSCAPE);
      params.setFlashMode("torch");
     params.setJpegThumbnailQuality(100);
     params.setExposureCompensation(0);
     params.setJpegQuality(100);
 //  params.setPreviewSize(PreviewSizeWidth,PreviewSizeHeight);
   //now that you have the list of supported sizes, pick one and set it back to   the parameters...
   //int w=0,h=0;
   for(int i=0;i<sizes.size();i++)
   {
       if(sizes.get(i).width > size.width)
           size = sizes.get(i);
   }
   params.setPictureSize(size.width, size.height);
   Toast.makeText(getContext(), size.width+"and"+size.height,Toast.LENGTH_SHORT).show();

  camera.setParameters(params);

  if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)
  {
  params.set("orientation", "portrait");
  camera.setDisplayOrientation(90);
  }
  camera.startPreview();
  try
  {
  camera.setPreviewDisplay(holder);
  }
  catch (IOException exception)
  {
  camera.release();
  camera = null;
  }

  }
public void surfacechange(SurfaceHolder持有者,int格式,int w,int h){//
camera=camera.open();
params=camera.getParameters();
列表大小=params.getSupportedPictureSizes();
Camera.Size=Size.get(0);
params.setFocusMode(摄像头.Parameters.FOCUS\u MODE\u宏);
参数设置白平衡(摄像机参数白平衡自动);
参数设置场景模式(摄像机参数场景模式景观);
参数setFlashMode(“火炬”);
参数setJpegThumbnailQuality(100);
参数setExposureCompensation(0);
参数设置质量(100);
//参数setPreviewSize(PreviewSizeWidth,PreviewSizeHight);
//现在您已经有了支持的大小列表,选择一个并将其设置回参数。。。
//int w=0,h=0;
用于(int i=0;i size.width)
大小=大小。获取(i);
}
参数setPictureSize(大小、宽度、大小、高度);
Toast.makeText(getContext(),size.width+”和“+size.height,Toast.LENGTH_SHORT).show();
摄像机。设置参数(参数);
if(this.getResources().getConfiguration().orientation!=Configuration.orientation\u横向)
{
参数设置(“方向”、“肖像”);
摄像头。设置显示方向(90);
}
camera.startPreview();
尝试
{
摄像头。设置预览显示(支架);
}
捕获(IOException异常)
{
相机。释放();
摄像机=零;
}
}
}

检查此项

私人摄像机

        if (camera == null) {

        } else {
            // Set the torch flash mode
            Parameters param = camera.getParameters();
            param.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            try {
                camera.setParameters(param);
                camera.startPreview();

            } catch (Exception e) {

            }
        }

你拍完这张照片后会怎么处理?您是否移动到不同的活动/片段,然后返回到拍照片段?您是否只存储照片而不离开当前活动/片段

如果您没有留下活动/片段,我建议尝试在最后一个摄像头结束时重新启动火炬。PictureCallback。请记住,拍照后相机预览将停止,因此您必须重新启动预览。也许是这样的:

mPictureCallback = new Camera.PictureCallback(){
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        // ... process your byte data ...

        if(mCamera != null){

            Camera.Parameters params = mCamera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            mCamera.setParameters(params);

            try{
                mCamera.startPreview();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
};

在调用mCamera.setParameters(params)之前,需要调用mCamera.stopPreview();如下图所示

                mCamera.stopPreview();
                mCamera.setParameters(cameraParameters);
                mCamera.startPreview();

我在三星Nexus3中遇到了问题,但在LG Nexus4中工作正常