• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   ```