1、引言
在 B 端及企业级应用生态中,智能通信体验一直是最具含金量的触点之一。对于快递物流、外卖派送、专车出行等企业来说,如果能在员工致电客户,或是客户拨入时,于系统原生的"来去电接听页"上直接打出实时订单状态、配送详情和地理位置,将极大提升信息流通效率与专业度。

过去,这种底层的通话拦截与 UI 渲染特权往往被系统锁死。而在 HarmonyOS NEXT 6.1.1 (API 24) 中,华为通过 @kit.CallServiceKit 正式向通过资质审核的企业级应用开放了这片"核心疆域"!通过派生专属的 CallerInfoQueryExtensionAbility,开发者可以直接向原生通话界面注入富文本数据体。

今天,我们将从头梳理这一功能的接入流程,并在端侧实战一把来去电企服智慧屏的搭建。
2、Kit能力介绍
Call Service Kit 是 HarmonyOS 系统级的通信中枢,它不仅负责底层的基带调度,还向上提供了状态订阅、应用间音视频通话(VoIP)集成等进阶能力。
在 6.1.1 版本中,该套件的重心开始向商业化生态赋能 倾斜。本次新增的企业服务信息展示能力,允许合法接入的应用拦截系统的电话识别链。一旦触发通话,系统通话应用会拉起注册的应用 Extension,并下发对方号码。应用随后返回一组结构化的业务数据,由系统的来去电 UI 根据标准模板(如快递模式模板)进行原生级渲染,达到完美的融合体验。
3、Kit API介绍
本次更新的核心抓手位于 CallerInfoQueryExtensionAbility 这个特殊的扩展能力基类中,主要新增了一个生命周期与一个环境开关查询函数:
typescript
// 1. 查询陌生号码与信息识别的总开关状态,以及当前调用应用是否被用户授予了识别权限
queryNumberIdentifySwitchState(context: Context): SwitchState;
// 2. 来/去电核心回调(使用 Promise 异步响应)
onQueryBusinessServiceData(phoneNumber: string): Promise<Array<BusinessServiceData>>;
BusinessServiceData 支持高度定制化的强类型字段,例如 numberIdentify.BusinessServiceType.DELIVERY 枚举明确界定了当前渲染为"派送模式",系统会自动适配对应的字段(单号、地址、倒计时时间等)。
4、Kit 6.1 新增特性介绍
4.1 AGC 资质申请的铁壁防御
这绝非普通 API 随开随用!因为牵涉到敏感的通信隐私,本功能仅供企业开发者使用,并且具有强力的防护机制:
开发者必须先登录 AppGallery Connect (AGC) -> 项目设置 -> 开放能力管理,手动申请企业服务信息展示特权,在经历 1-3 个工作日的人工审查后方可开通。只有获批后,再重新拉取 Debug Profile 并替换原有签名文件,你的设备底座才允许这段代码真正拉起生效。
4.2 UI 词典排序与强行去重
当用户的手机里装了多个应用,且都想竞争同一通电话的展示位时怎么办?系统设定了铁律:仅展示第一条企业服务信息数据。对于同权力的应用冲突,底座会依据应用包名(Bundle Name)的字典序排队,排第一的独占展示权。
5、6.1新增特性项目实战
我们将要在应用工程内构造一个专属的 Extension 并正确注册。
5.1 构建 CallerInfoQueryExtensionAbility
创建代码文件 entry/src/main/ets/businessservicedataquery/EntryBusinessServiceDataQueryExtAbility.ets:
typescript
import { CallerInfoQueryExtensionAbility, numberIdentify } from '@kit.CallServiceKit';
export default class EntryBusinessServiceDataQueryExtAbility extends CallerInfoQueryExtensionAbility {
// 来去电时由系统通话应用主动调用该接口查询企业联系人信息
async onQueryBusinessServiceData(phoneNumber: string): Promise<Array<numberIdentify.BusinessServiceData>> {
console.info(`[CallServiceKitDemo] 触发企业服务信息查询,当前号码: ${phoneNumber}`);
return new Promise<Array<numberIdentify.BusinessServiceData>>((resolve, reject) => {
// 业务实战:快速从 RDB 关系型数据库或本地高速 KVStore 检索该号码关联的运单
let isSuccess = true;
if (isSuccess) {
console.info(`[CallServiceKitDemo] 数据查询成功,开始组装派送单数据...`);
// 返回符合派送业务类型的特征数据包
resolve([{
type: numberIdentify.BusinessServiceType.DELIVERY,
delivery: {
customerName: "骑兵连孙德胜",
deliveryNumber: "SF1008611",
deliveryStatus: "正在派送中",
deliveryAddress: "鸿蒙研发中心三号楼",
deliveryTimeout: "今天 18:00 前",
deliveryStatusColor: numberIdentify.DeliveryStatusColor.GREEN
}
}]);
} else {
reject("未命中本地缓存订单");
}
});
}
}
5.2 精准注册 Extension
在项目的 module.json5 中,为刚刚写好的能力注册专门的 type: "callerInfoQuery" 通道:
json5
{
"module": {
"extensionAbilities": [
{
"name": "EntryBusinessServiceDataQueryExtAbility",
"srcEntry": "./ets/businessservicedataquery/EntryBusinessServiceDataQueryExtAbility.ets",
"type": "callerInfoQuery", // 核心:指定类型拦截器
"exported": true
}
]
}
}
6、运行效果
为了在调试设备上激活它,请前往系统"电话"App -> 右上角"更多" -> "设置" -> "陌生号码和信息识别",开启总开关并激活你刚才安装的应用子开关。
此时,用另一部手机拨打测试机的号码。测试机的原生接听界面会瞬间在号码下方弹出绿色卡片,清晰地显示:"SF1008611 | 正在派送中 | 鸿蒙研发中心三号楼 "。接线员无需切后台,看一眼屏幕便掌握了客户全部订单状态。


7、避坑指南
!WARNING 注意事项
1. 死亡倒计时 :系统对
onQueryBusinessServiceData接口有着极其苛刻的时效要求。接口执行耗时必须严格控制在 1秒 (1000ms) 以内。一旦超时,系统判定查询失败。因此,绝不允许在该方法内进行即时的 HTTP 远端长连接请求。正确做法是:App 在后台静默预拉取或通过推送将数据落盘到本地 SQLite/KVStore,在接到回调时,直接扫盘取数据,10 毫秒级返回!2. AbilityStage 连坐陷阱 :由于系统拉起 Extension 之前,必然会先创建宿主应用的
AbilityStage。如果你的AbilityStage.onCreate阶段塞满了诸如超大 SO 库解压、白屏耗时加载等庞大逻辑,会导致 Extension 被牵连延误而大面积触发超时。对于涉及通话展示特权的应用,Stage 阶段代码必须极致精简瘦身!
8、总结
通过 Call Service Kit 的本次开放,HarmonyOS NEXT 再次模糊了"操作系统"与"顶级生态应用"之间的物理边界。这种深入来去电底层画面的原生赋权,让 B 端应用具备了降维打击般的竞争力体验。当然,权利越大责任越大,守住 AGC 的资质准入门槛和 1 秒死亡查询线,是你驰骋这片新大陆的唯二法则。#### 1、引言
在 HarmonyOS 的应用架构体系中,冷启动速度一直是决定用户体验的"生死线"。
过去,开发者习惯于在 EntryAbility 的 onCreate 甚至是首页的 aboutToAppear 中进行大量沉重的资源预热(例如长连接建立、数据库初始化、大型 SO 库预加载),这往往会导致白屏时间飙升,甚至触犯应用启动超时异常。此外,HarmonyOS 底层独有的 Hyper Snap(应用快照缓存) 机制虽然能够实现应用的"秒开",但这种"速冻解冻"的过程也带来了诸多隐患:一旦底层进程被强杀,再次依靠快照唤醒时,网络连接池往往已经断开,而旧的 Token 缓存可能早已失效。
针对这两大痛点,HarmonyOS NEXT 6.1.1 (API 24) 在 AbilityStage 层面新增了两个极具战术价值的生命周期钩子,彻底赋予了全栈开发者在"极寒启动"与"死后复活"场景下的代码介入权。

2、Kit能力介绍
本次重大更新隶属于 @kit.AbilityKit(元能力套件)。作为全应用的生命周期指挥中枢,Ability Kit 不仅负责各个 Ability 实例的调度,更是应用进程与系统底层握手的关键桥梁。本次新增的回调彻底打开了应用在极早期初始化的控制台口。
3、Kit API介绍
两个重磅级生命周期 API 均存在于 AbilityStage 基类之中,支持开发者重写调用:
typescript
// 当 AbilityStage 即将创建第一个 Ability 时触发
onAboutToCreateAbility(): void
// 当进程从应用快照(Hyper Snap)快速启动复活时触发
onLaunchFromHyperSnap(): void
4、Kit 6.1 新增特性介绍
4.1 预热极限通道:onAboutToCreateAbility
该回调位于进程刚启动,但第一张 UI 界面(甚至第一个 UIAbility)都还没被系统进行沉重初始化的黄金夹缝中。利用这个时间差,主线程可以从容地把 I/O 耗时任务、解压资源包的任务踢入后台 TaskPool,将白屏时间压缩至最低。
4.2 快照复苏响应:onLaunchFromHyperSnap
这是应用"回魂"的第一声宣告。当系统决定复用应用快照以实现"秒开"时,进程会被解冻并触发该回调。这给开发者提供了一个绝佳的机会来主动验证本地网络 Socket 状态与过期时间,避免旧缓存脏数据导致的用户交互崩溃。
5、6.1新增特性项目实战
我们将通过构建「Ability 生命周期探查控制舱」,在 MyAbilityStage.ets 中实战这两大钩子函数。
5.1 构造并注册自定义 AbilityStage
默认情况下,应用的 module.json5 是不显式包含 AbilityStage 配置的。我们需要在其中增加 srcEntry 的映射:
json5
// entry/src/main/module.json5
{
"module": {
"name": "entry",
"type": "entry",
"srcEntry": "./ets/myabilitystage/MyAbilityStage.ets", // 指向自定义入口
"description": "$string:module_desc",
"mainElement": "EntryAbility",
// ...
}
}
5.2 实战 onAboutToCreateAbility 与 onLaunchFromHyperSnap
新建 entry/src/main/ets/myabilitystage/MyAbilityStage.ets 文件并继承自 @kit.AbilityKit 提供的基类:
typescript
import { AbilityStage } from '@kit.AbilityKit';
export default class MyAbilityStage extends AbilityStage {
/**
* 当 AbilityStage 即将创建第一个 Ability 时调用。
* 这个阶段 UI 组件尚未被解析,是做业务预先初始化的绝佳位置。
*/
onAboutToCreateAbility(): void {
console.info('[AbilityKitDemo] onAboutToCreateAbility: 正在创建第一个 Ability...');
// 实战应用:
// 1. 在此处异步派发 Worker 或 TaskPool 去解压资源包
// 2. 向自研的 APM 日志上报框架打下第一根时间戳
}
/**
* 当进程从应用快照(Hyper Snap)启动时调用。
*/
onLaunchFromHyperSnap(): void {
console.info('[AbilityKitDemo] onLaunchFromHyperSnap: 从应用快照快速复活启动...');
// 实战应用:
// 1. 检测当前网络状况,重新执行 websocket 的 connect()
// 2. 在安全类应用中,强制刷新生物特征识别 Token
}
}
6、运行效果
在本示例中,完全自定义的 AbilityStage 在应用进程拉起瞬间执行了以下监听行为:
- 纯净冷启动 :系统在 DevEco Studio 的 Logcat 中优先输出了
[AbilityKitDemo] onAboutToCreateAbility日志,代表应用顺利进入该黄金预热窗口。 - 快照复活 :将应用退至后台并经历长时间休眠(或杀掉应用触发快照缓存恢复),再次唤起时控制台输出了
[AbilityKitDemo] onLaunchFromHyperSnap,证明此时可以安全执行状态刷新。
7、避坑指南
!WARNING 注意事项
严禁在预热钩子中同步阻塞 :虽然
onAboutToCreateAbility是预热的好地方,但千万不要在这个函数里写任何同步的(阻塞式)长耗时逻辑(如死循环计算或同步磁盘 I/O),这会本末倒置,直接触发底层的 watchdog 从而导致 App Crash(错误码通常为冷启动超时)。
8、总结
HarmonyOS NEXT 6.1.1 (API 24) 对 Ability Kit 的补强,彰显了系统正在向精细化性能调度方向进化。
onAboutToCreateAbility 和 onLaunchFromHyperSnap 就像是在庞大的应用引擎管线中加装的两个阀门。一个让你能在列车发动前优雅地加注润滑油,另一个让你能在休眠系统重启后立刻进行故障排查。吃透并且善用这些生命周期缝隙,将能从毫秒级别为你的 App 带来冷启动体验质的飞跃。