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