背景与更新
随着移动摄影技术的演进,微距拍摄已成为智能手机相机的标配功能。在 HarmonyOS 6.0(API version 20)中,Camera Kit 新增了对微距状态变化事件的监听支持。这意味着开发者现在可以精确感知相机硬件或算法是否进入了微距模式,从而调整 UI 提示或优化拍摄参数。
核心接口解析
以往开发中,应用层很难直接得知当前是否处于微距模式。HarmonyOS 6.0 通过在 VideoSession 和 PhotoSession 中引入 on('macroStatusChanged') 和 off('macroStatusChanged') 解决了这个问题。
监听状态变化
使用 on 方法订阅事件。当系统因距离变化自动切换微距模式时,回调函数会收到通知。
- 类型:固定为
'macroStatusChanged' - 回调参数:
AsyncCallback<boolean>,true表示开启,false表示关闭。 - 适用对象:
camera.VideoSession和camera.PhotoSession。
注销监听
使用 off 方法取消订阅。如果不传具体回调,将移除该事件下的所有监听器,防止内存泄漏。
实战代码示例
下面是一个完整的 SmartCameraManager 类示例,展示了如何注册监听并更新 UI 状态。
import { camera } from '@kit.CameraKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
export class SmartCameraManager {
private photoSession: camera.PhotoSession | null = null;
private isMacroModeActive: boolean = false;
// 注册微距状态监听
public registerMacroStatusListener(session: camera.) {
. = session;
{
macroStatusCallback = (: , : ): {
(err !== && err. !== ) {
.();
;
}
. = macroStatus;
message = macroStatus ? : ;
.();
promptAction.({ message, : });
.(macroStatus);
};
..(, macroStatusCallback);
.();
} (error) {
err = error ;
.();
}
}
() {
(.) {
{
..();
.();
. = ;
} (error) {
err = error ;
.();
}
}
}
() {
.();
}
}


