安卓 – 手电筒控制在棉花糖

前端之家收集整理的这篇文章主要介绍了安卓 – 手电筒控制在棉花糖前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在最近的棉花糖生成中,我有一个关于相机的问题,更具体地说是手电筒.
在任何棉花糖之前,我需要做的是打开/关闭闪光灯如下:
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.

请注意,这段代码仅适用于操作系统6,因此您需要检查设备操作系统,并根据您需要选择哪些API来调用棉花糖设备.

如果解决您的问题,请将此标记解决方案.

猜你在找的Android相关文章