在最近的棉花糖生成中,我有一个关于相机的问题,更具体地说是手电筒.
在任何棉花糖之前,我需要做的是打开/关闭闪光灯如下:
在任何棉花糖之前,我需要做的是打开/关闭闪光灯如下:
private void turnFlashOn(final Camera camera,int flashLightDurationMs) { if (!isFlashOn()) { final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes(); if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_TORCH)) { mParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); camera.setParameters(mParams); } } }
和
private void turnFlashOff(Camera camera) { if (camera != null) { final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes(); if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_OFF)) { mParams.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); camera.setParameters(mParams); } } }
不幸的是,棉花糖装置在野外开始崩溃.不知何故camera.getParameters()和camera.setParameters()开始失败,消息如:
RuntimeException: getParameters Failed (empty parameters)
RuntimeException: setParameters Failed
我尝试在获取参数之前启动和停止预览,这不再会引发错误.但是当我打电话给camera.startPreview()时,预览不会恢复.
我担心释放相机并重新打开它是不成问题的,因为这需要几秒钟,会产生不好的体验.
关于如何在棉花糖中可靠地打开/关闭手电筒的建议?
解决方法
Google在OS 6(Android M)中推出了torchmode.
如果您的目的只是打开/关闭闪光灯,以下代码可以帮助您:
如果您的目的只是打开/关闭闪光灯,以下代码可以帮助您:
private static void handleActionTurnOnFlashLight(Context context){ try{ CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); String[] list = manager.getCameraIdList(); manager.setTorchMode(list[0],true); } catch (CameraAccessException cae){ Log.e(TAG,cae.getMessage()); cae.printStackTrace(); } } private static void handleActionTurnOffFlashLight(Context context){ try{ CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); manager.setTorchMode(manager.getCameraIdList()[0],false); } catch (CameraAccessException cae){ Log.e(TAG,cae.getMessage()); cae.printStackTrace(); } }
所有你需要做的是:获取相机ID的列表,哪个相机ID为零(0)是您要打开或关闭闪光灯的主要相机.只需将cameraID传递给具有布尔值的settochMode API,以打开或关闭该API.