繁体   English   中英

由于手电筒无法使用Android Flash模式

[英]Android flash mode as torch doesnt works

我正在使用相机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;
  }

  }

}

检查一下

私人相机相机;

        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) {

            }
        }

拍照后您会如何处理? 您是否移至其他活动/片段,然后又回到拍照片段中? 您是否只是存储照片而不离开当前活动/片段?

如果您不离开活动/片段,建议您在上一个Camera.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.stopPreview(),然后再调用mCamera.setParameters(params); 像下面

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM