# 微距能力设置(ArkTS)

从API version 19开始，支持设置微距能力。微距能力是指通过光学设计与算法优化，实现近距离对焦并清晰捕捉微小物体细节的相机功能。  

#### 开发步骤

详细的API说明请参考[Camera](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera)。

1. 导入camera接口，接口中提供了相机相关的属性和方法，导入方法如下。

   ```
   import { camera } from '@kit.CameraKit';
   import { BusinessError } from '@kit.BasicServicesKit';
   ```

2. 通过[isMacroSupported](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera-macroquery#ismacrosupported19)接口，查询当前设备是否支持微距能力。

   ```
   let isSupported: boolean = photoSession.isMacroSupported();
   ```

3. 通过[enableMacro](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera-macro#enablemacro19)接口，开启或关闭微距能力。

   ```
   function EnableMacro(photoSession: camera.PhotoSession): void {
      let isSupported: boolean = photoSession.isMacroSupported();
      if (isSupported) {
         photoSession.enableMacro(true);
      }
   }
   ```

#### 状态监听

从API version 20开始，支持监听微距能力是否发生改变。

注册macroStatusChanged事件监听微距能力变化，事件监听可参考[on('macroStatusChanged')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera-photosession#onmacrostatuschanged20)。

```
function callback(err: BusinessError, macroStatus: boolean): void {
   if (err !== undefined && err.code !== 0) {
      console.error(`Callback Error, errorCode: ${err.code}`);
      return;
   }
   console.info(`Macro state: ${macroStatus}`);
}

// 注册回调函数。
function registerMacroStatusChanged(photoSession: camera.PhotoSession): void {
   photoSession.on('macroStatusChanged', callback);
}

// 解注册。
function unregisterMacroStatusChanged(photoSession: camera.PhotoSession): void {
   photoSession.off('macroStatusChanged');
}
```

