1# 手电筒使用(C++) 2 3手电筒模式的使用是通过手机启用手电筒功能,使设备的手电筒功能持续保持常亮状态。 4 5在使用相机应用并操作手电筒功能时,存在以下几种情况说明: 6- 当使用后置相机并设置闪光灯模式[Camera_FlashMode](../../reference/apis-camera-kit/_o_h___camera.md#camera_flashmode)关闭时,手电筒功能无法启用。 7- 当使用前置相机时,手电筒可以正常启用并保持常亮状态。 8- 从前置相机切换至后置相机时,如果手电筒原本处于开启状态,它将会被自动关闭。 9 10## 开发步骤 11 12详细的API说明请参考[Camera API参考](../../reference/apis-camera-kit/_o_h___camera.md)。 13 141. 导入NDK接口。选择系统提供的NDK接口能力,导入NDK接口的方法如下。 15 16 ```c++ 17 // 导入NDK接口头文件。 18 #include "hilog/log.h" 19 #include "ohcamera/camera.h" 20 #include "ohcamera/camera_input.h" 21 #include "ohcamera/capture_session.h" 22 #include "ohcamera/camera_manager.h" 23 ``` 24 252. 在CMake脚本中链接相关动态库。 26 27 ```txt 28 target_link_libraries(entry PUBLIC 29 libace_napi.z.so 30 libohcamera.so 31 libhilog_ndk.z.so 32 ) 33 ``` 34 353. 通过[OH_CameraManager_IsTorchSupported()](../../reference/apis-camera-kit/_o_h___camera.md#oh_cameramanager_istorchsupported)方法,检测当前设备是否支持手电筒。 36 37 ```c++ 38 bool IsTorchSupported(Camera_Manager* cameraManager) 39 { 40 // 判断设备是否支持手电筒模式。 41 bool isTorchSupported = false; 42 Camera_ErrorCode ret = OH_CameraManager_IsTorchSupported(cameraManager, &isTorchSupported); 43 if (cameraManager == nullptr || ret != CAMERA_OK) { 44 OH_LOG_ERROR(LOG_APP, "OH_CameraManager_IsTorchSupported failed."); 45 } 46 if (isTorchSupported) { 47 OH_LOG_INFO(LOG_APP, "isTorchSupported success."); 48 } else { 49 OH_LOG_ERROR(LOG_APP, "isTorchSupported failed."); 50 } 51 return isTorchSupported; 52 } 53 54 ``` 55 564. 通过[OH_CameraManager_IsTorchSupportedByTorchMode()](../../reference/apis-camera-kit/_o_h___camera.md#oh_cameramanager_istorchsupportedbytorchmode)方法,检测当前设备是否支持指定的手电筒模式。 57 58 ```c++ 59 bool IsTorchSupportedByTorchMode(Camera_Manager* cameraManager, Camera_TorchMode torchMode) 60 { 61 bool torchModeSupported = false; 62 Camera_ErrorCode ret = OH_CameraManager_IsTorchSupportedByTorchMode(cameraManager, torchMode, &torchModeSupported); 63 if (cameraManager == nullptr || ret != CAMERA_OK) { 64 OH_LOG_ERROR(LOG_APP, "OH_CameraManager_IsTorchSupported failed."); 65 } 66 if (torchModeSupported) { 67 OH_LOG_INFO(LOG_APP, "isTorchModeSupported success."); 68 } else { 69 OH_LOG_ERROR(LOG_APP, "isTorchModeSupported failed. %{public}d ", ret); 70 } 71 return torchModeSupported; 72 } 73 74 ``` 75 765. 通过[OH_CameraManager_SetTorchMode()](../../reference/apis-camera-kit/_o_h___camera.md#oh_cameramanager_settorchmode)方法,设置当前设备的手电筒模式。 77 78 ```c++ 79 Camera_ErrorCode SetTorchMode(Camera_Manager* cameraManager, Camera_TorchMode torchMode) 80 { 81 // 在torchMode支持的情况下进行设置手电筒模式。 82 Camera_ErrorCode ret = OH_CameraManager_SetTorchMode(cameraManager, torchMode); 83 if (ret != CAMERA_OK) { 84 OH_LOG_ERROR(LOG_APP, "OH_CameraManager_SetTorchMode failed. %{public}d ", ret); 85 } else { 86 OH_LOG_INFO(LOG_APP, "OH_CameraManager_SetTorchMode success."); 87 } 88 return ret; 89 } 90 ``` 91 92 93## 状态监听 94 95在相机应用开发过程中,可以随时监听手电筒状态,包括手电筒打开、手电筒关闭、手电筒不可用、手电筒恢复可用。手电筒状态发生变化,可通过回调函数获取手电筒模式的变化。 96 97 通过注册torchStatus事件,通过回调返回监听结果,callback返回Camera_TorchStatusInfo参数,参数的具体内容可参考相机管理器回调接口实例[Camera_TorchStatusInfo](../../reference/apis-camera-kit/_camera___torch_status_info.md)。 98 99 ```c++ 100 void TorchStatusCallback(Camera_Manager *cameraManager, Camera_TorchStatusInfo* torchStatus) 101 { 102 OH_LOG_INFO(LOG_APP, "TorchStatusCallback is called."); 103 } 104 Camera_ErrorCode RegisterTorchStatusCallback(Camera_Manager *cameraManager) 105 { 106 Camera_ErrorCode ret = OH_CameraManager_RegisterTorchStatusCallback(cameraManager, TorchStatusCallback); 107 if (ret != CAMERA_OK) { 108 OH_LOG_ERROR(LOG_APP, "OH_CameraManager_RegisterTorchStatusCallback failed."); 109 } 110 return ret; 111 } 112 ```