Camera2闪光灯开启与关闭

@TargetApi(Build.VERSION_CODES.M)
public void setFlash() {
    if (flashState == 0) {
        flash.setImageResource(R.drawable.camera_flash_on);
        flashState = 1;
        showToast("灯光已开启");
        openFlash();


    } else {
        flash.setImageResource(R.drawable.camera_flash_off);
        flashState = 0;
        showToast("灯光已关闭");
        closeFlash();
    }
}

private void openFlash(){
    mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE,
            CaptureRequest.FLASH_MODE_TORCH);
    mCaptureRequest = mCaptureRequestBuilder.build();
    try {
        mCameraCaptureSession.setRepeatingRequest(mCaptureRequest, mSessionCaptureCallback, mBackgroundHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
private void closeFlash(){
    mCaptureRequestBuilder.set(CaptureRequest.FLASH_MODE,
            CaptureRequest.FLASH_MODE_OFF);
    mCaptureRequest = mCaptureRequestBuilder.build();
    try {
        mCameraCaptureSession.setRepeatingRequest(mCaptureRequest, mSessionCaptureCallback, mBackgroundHandler);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
### 使用 Android Camera2 API 实现带闪光灯的拍照功能 为了实现带有闪光灯功能的照片拍摄,可以按照以下方法操作: #### 初始化相机管理器并获取特性列表 首先,在初始化 `CameraManager` 后,通过查询设备上的可用摄像机ID列表来确认所选摄像头是否支持闪光灯。这一步骤非常重要,因为并非所有的摄像头都具备此硬件能力。 ```java // 获取CameraManager实例 CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); String[] cameraIds; try { cameraIds = manager.getCameraIdList(); } catch (CameraAccessException e) { throw new RuntimeException(e); } for (String id : cameraIds){ try { // 查询特定摄像头的能力特征集 StreamConfigurationMap map = manager.getCameraCharacteristics(id).get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); Integer flashAvailability = manager.getCameraCharacteristics(id). get(CameraCharacteristics.FLASH_INFO_AVAILABLE); if(Boolean.TRUE.equals(flashAvailability)){ Log.d(TAG,"This device has a flash unit."); }else{ Log.w(TAG,"No flash available on this device"); } }catch(Exception ex){ continue; // 如果访问失败则跳过该摄像头 } } ``` #### 设置捕获请求中的闪光灯参数 当准备构建用于预览或捕捉图像的实际 `CaptureRequest.Builder` ,应根据需求配置相应的闪光灯模式。这里提供了几种常见的选项供选择: - **自动** (`FLASH_MODE_AUTO`):让系统决定何开启闪光灯。 - **始终开启** (`FLASH_MODE_TORCH`):保持常亮状态作为手电筒用途。 - **强制启用** (`FLASH_MODE_ON`):每次拍摄照片前都会触发一次强光照射。 - **关闭** (`FLASH_MODE_OFF`):完全禁用闪光灯效果。 ```java if (flashSupported && isTorchOn()) { previewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); }else{ previewBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON); } previewBuilder.set(CaptureRequest.FLASH_MODE, mode); //mode为上述四种之一 ``` #### 控制按钮事件处理逻辑 针对UI界面上用来切换闪光灯开关状态的控件绑定点击监听器,并在此处更新内部标志位变量以反映最新的用户偏好设定。每当检测到交互动作发生后,重新提交修改后的 `CaptureRequest` 给会话对象即可完成即生效的目的[^1]。 ```java private boolean mIsFlashlightEnabled; public void toggleFlashlight(View view) { mIsFlashlightEnabled = !mIsFlashlightEnabled; updatePreview(); // 更新预览界面显示 if(mSession != null){ try { captureStillPicture(); } catch (Exception e) { Toast.makeText(context,e.getMessage(),Toast.LENGTH_SHORT).show(); } } } ``` 以上就是利用 Android Camera2 API 来控制闪光灯的具体做法概述。需要注意的是不同品牌型号之间可能存在细微差异,因此建议开发者们仔细阅读官方文档并参照样例项目来进行调试优化工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值