更新记录
1.0.8(2026-09-06)
- 修复 iOS 安装自定义基座后,调用接口或退出示例页提示插件不存在的问题;同时修复 uni-app x 的 iOS 导入失败。
- iOS 拨号和短信编辑器按系统实际结果返回回调,短信正文会预填;打开编辑器成功不代表短信已经发送。
- iOS 不支持的能力会返回明确错误,成功或失败后均执行完成回调;无需修改配置或调用代码。
- 升级后需要重新制作并安装 iOS 自定义基座;本次不需要重新制作 Android 自定义基座。
1.0.6(2026-08-25)
- 修复
getRecorderDirectories已生成录音目录数组、但成功回调仅返回list,导致客户通过语义字段res.directories取不到目录的问题。 - Android 与非 Android 降级结果统一返回
directories;同时保留list作为历史兼容别名,旧调用无需修改。 - 补充录音目录获取示例、字段含义和 Android 厂商私有目录权限边界。
1.0.5(2026-06-24)
- 修复 uni-app x Android 示例页 options 强转崩溃:页面局部
DemoOptions不再通过as CallKitBaseOptions/as PermissionOptions传入插件 API。 - 示例页改为直接构造
CallKitBaseOptions和PermissionOptions强类型对象,避免 Android 运行时出现DemoOptions cannot be cast to CallKitBaseOptions。 - 已在 Android 自定义基座中通过 USB/ADB 点击“能力”“检查权限”“通话状态”复检,相关 API 均返回 success,未再出现
lizhao-call-kit相关ClassCastException。 - 本版本仅修改 uni-app x 示例和发布资料,不修改公共接口、Android 原生实现、web/mp/app-plus/iOS 实现或 uni-app 示例。
平台兼容性
uni-app(4.84)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.84)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
lizhao-call-kit
lizhao-call-kit 是面向 uni-app / uni-app x 的电话、短信、通讯录与通话录音文件扫描 UTS API 插件。Android 提供真实原生能力;iOS、Harmony、Web 和小程序提供能力探测、系统意图或明确降级,不支持的能力会触发 fail / complete,不会伪造成功。
从简单到复杂
| 接入场景 | 推荐能力 | 说明 |
|---|---|---|
| 只需要拨号或打开短信页 | dialPhone / sendSmsIntent |
优先使用系统意图,接入成本最低 |
| 需要判断当前平台能做什么 | getCallKitCapabilities |
先拿能力矩阵,再决定展示哪些按钮 |
| 需要判断当前 Android 设备是否适配 | checkDeviceCompatibility |
返回机型、SDK、targetSdk、SIM 卡槽、媒体权限和系统限制提示 |
| 需要通话监听和通话记录 | requestPermissions / registerCallListener / getCallLogs |
Android 自定义基座和用户授权后使用 |
| 需要匹配通话录音文件 | checkCallAutoRecorder / getRecorderDirectories / getAllRecorderFiles / matchCallRecordings |
插件不直接录音,只扫描系统/OEM 录音文件并匹配 |
| 需要短信业务闭环 | registerSmsListener / sendSmsSilent / onCallKitEvent |
静默短信支持短信回执事件,依赖运营商和系统策略 |
| 需要客户资料写入 | getContacts / addContact |
支持手机号、邮箱和备注 |
完整示例源码位于 uni_modules/lizhao-call-kit/example/uniapp/callKit.vue 和 uni_modules/lizhao-call-kit/example/uniappx/index.uvue。
最小可运行示例
import {
getCallKitCapabilities,
checkDeviceCompatibility,
dialPhone,
sendSmsIntent
} from '@/uni_modules/lizhao-call-kit'
// 第一步先探测能力,按平台显示可用功能。
getCallKitCapabilities({
success(res) {
console.log('lizhao-call-kit 能力矩阵', res)
}
})
// Android 真机建议再做机型适配检测,用于展示系统限制和权限建议。
checkDeviceCompatibility({
success(res) {
console.log('机型适配诊断', res)
}
})
// 简单拨号优先使用系统拨号页,避免直接拨号权限门槛。
dialPhone({
phoneNumber: '10086',
success(res) {
console.log('已打开拨号页', res)
}
})
// 多端短信建议先走系统短信页。
sendSmsIntent({
phoneNumber: '10086',
message: '测试短信',
success(res) {
console.log('已打开短信页', res)
}
})
Android 权限与自定义基座
| 权限 | 用途 | 是否需要自定义基座 |
|---|---|---|
READ_PHONE_STATE |
通话状态监听 | 是 |
READ_CALL_LOG |
通话记录查询和录音匹配 | 是 |
CALL_PHONE |
直接拨打电话 | 是 |
ANSWER_PHONE_CALLS |
接听/挂断 best-effort | 是 |
READ_SMS |
读取短信 | 是 |
RECEIVE_SMS |
监听新短信 | 是 |
SEND_SMS |
静默发送短信 | 是 |
READ_CONTACTS |
读取通讯录 | 是 |
WRITE_CONTACTS |
新增联系人 | 是 |
READ_MEDIA_AUDIO / READ_EXTERNAL_STORAGE |
扫描录音文件;targetSdkVersion 33+ 使用 READ_MEDIA_AUDIO,旧 targetSdk 按系统版本兼容 READ_EXTERNAL_STORAGE |
是 |
MANAGE_EXTERNAL_STORAGE |
扫描厂商私有录音目录 | 是,且需用户手动授权 |
POST_NOTIFICATIONS |
Android 13+ 前台通知 | 是 |
FOREGROUND_SERVICE |
前台服务 | 是 |
FOREGROUND_SERVICE_DATA_SYNC |
Android 14+ dataSync 类型前台服务 | 是 |
requestPermissions 会按应用的 targetSdkVersion 归一化媒体权限。即使设备低于 Android 13,targetSdkVersion 33+ 的基座也不会再向 HBuilderX 权限桥提交已废弃的 READ_EXTERNAL_STORAGE。
通话监听
import {
requestPermissions,
registerCallListener,
onCallKitEvent,
offCallKitEvent
} from '@/uni_modules/lizhao-call-kit'
const handleEnded = (event) => {
console.log('通话结束事件', event)
}
// 请求电话状态权限后再注册监听。
requestPermissions({
permissions: ['READ_PHONE_STATE', 'READ_CALL_LOG'],
success() {
registerCallListener({
includePhoneNumber: true,
matchRecorderOnEnd: true,
success(res) {
console.log('通话监听已注册', res)
}
})
}
})
// 事件过滤:只接收 ended 事件;传 null 可接收全部事件。
onCallKitEvent('ended', handleEnded)
// 页面卸载时释放。
offCallKitEvent('ended', handleEnded)
指定 SIM 卡拨号
Android 系统限制
callPhone 支持传入 simSlotIndex,Android 会优先使用 TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE 指定通话卡槽,并同时写入部分厂商拨号器兼容字段。该能力需要 CALL_PHONE 权限;如果当前设备没有对应卡槽、ROM 不接受指定卡槽参数或系统策略拦截,系统可能回退到默认通话卡。
import {
requestPermissions,
callPhone
} from '@/uni_modules/lizhao-call-kit'
// 示例使用 SIM1 直接拨号;SIM2 通常传 1。
requestPermissions({
permissions: ['CALL_PHONE', 'READ_PHONE_STATE'],
success() {
callPhone({
phoneNumber: '10086',
simSlotIndex: 0,
success(res) {
console.log('已发起指定 SIM 拨号', res)
}
})
}
})
通话录音文件匹配
通话录音不由插件直接录制。插件只检测系统/OEM 自动录音设置、跳转设置页、扫描录音文件,并按号码和时间与通话记录匹配。
import {
checkCallAutoRecorder,
getRecorderDirectories,
getAllRecorderFiles,
matchCallRecordings
} from '@/uni_modules/lizhao-call-kit'
checkCallAutoRecorder({
success(res) {
console.log('系统自动录音状态', res)
}
})
getRecorderDirectories({
success(res) {
// 标准字段为 directories;list 仅作为历史版本兼容别名保留。
console.log('录音目录候选项', res.directories)
}
})
getAllRecorderFiles({
includeDuration: true,
limit: 50,
success(res) {
console.log('录音文件列表', res)
}
})
matchCallRecordings({
windowMs: 180000,
limit: 20,
success(res) {
// 每条结果包含 score、matchedBy、timeDeltaMs、phoneScore、timeScore、confidence 和 reason。
console.log('匹配可信度', res)
}
})
getRecorderDirectories 返回的每一项包含 path / exists / writable / source。exists 表示当前应用在现有系统权限下能看到该候选目录;如果设备使用了其他厂商目录,可先通过 setRecorderDirectories 配置实际路径。Android 11 及以上的厂商私有目录仍可能需要用户开启所有文件访问权限,系统加密目录或其他应用沙箱目录无法由普通第三方应用读取。
短信监听与短信回执
sendSmsSilent 会把短信提交给系统,最终发送和送达状态通过 onCallKitEvent('sent')、onCallKitEvent('delivered') 返回。送达回执依赖运营商、SIM 卡、系统短信策略和用户授权。
import {
registerSmsListener,
sendSmsSilent,
onCallKitEvent
} from '@/uni_modules/lizhao-call-kit'
onCallKitEvent('received', (event) => {
console.log('收到短信', event.payload)
})
onCallKitEvent('sent', (event) => {
console.log('短信发送回执', event.payload)
})
onCallKitEvent('delivered', (event) => {
console.log('短信送达回执', event.payload)
})
registerSmsListener({
includeBody: true,
success(res) {
console.log('短信监听已注册', res)
}
})
sendSmsSilent({
phoneNumber: '10086',
message: '静默短信测试',
requestCode: 904001,
success(res) {
console.log('短信已提交系统', res)
}
})
通讯录读取与新增
import {
getContacts,
addContact
} from '@/uni_modules/lizhao-call-kit'
getContacts({
keyword: '张',
limit: 20,
success(res) {
// Android 返回 displayName、phoneNumbers、emails 和 note。
console.log('联系人列表', res)
}
})
addContact({
displayName: '测试客户',
phoneNumbers: ['***'],
emails: ['customer@example.com'],
note: '由 lizhao-call-kit 写入的测试备注',
success(res) {
console.log('联系人已新增', res)
}
})
前台服务
import {
startForegroundService,
stopForegroundService
} from '@/uni_modules/lizhao-call-kit'
startForegroundService({
title: '电话短信监听服务运行中',
content: 'lizhao-call-kit 正在按系统策略保持监听'
})
stopForegroundService()
API 查询
getCallKitCapabilities(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | CallKitBaseOptions | 否 | 回调参数 | 无 | success / fail / complete |
| 字段 | 类型 | 说明 |
|---|---|---|
| supported | boolean | 当前平台是否支持至少一种能力 |
| platform | string | 平台标识 |
| supportLevel | string | native / intent / limited / unsupported |
| requiresCustomBase | boolean | 是否需要自定义基座 |
checkDeviceCompatibility(options)
说明 检测当前 Android 设备、系统版本、targetSdkVersion、录音媒体权限、SIM 卡槽拨号基础条件和常见 ROM 风险。非 Android 平台返回明确降级结果。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | CallKitBaseOptions | 否 | 回调参数 | 无 | success / fail / complete |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| supported | boolean | 当前平台是否可使用 Android 原生主能力 |
| platform | string | 平台标识 |
| brand | string | 设备品牌 |
| manufacturer | string | 设备厂商 |
| model | string | 设备型号 |
| androidVersion | string | Android 系统版本 |
| sdkInt | number | Android SDK 版本号 |
| targetSdkVersion | number | 当前应用 targetSdkVersion |
| requiresAllFilesAccess | boolean | Android 11+ 是否建议开启所有文件访问权限 |
| requiresForegroundService | boolean | 是否建议开启前台服务保持监听稳定性 |
| supportsSimSlotCall | boolean | 当前设备是否具备指定 SIM 卡槽拨号的基础条件 |
| activeSimCount | number | 可用 SIM 数量 |
| mediaPermissionName | string | 当前录音扫描应使用的媒体权限;targetSdkVersion 33+ 为 READ_MEDIA_AUDIO |
| warnings | Array | 可能影响监听、录音扫描或短信读取的风险提示 |
| recommendations | Array | 建议用户开启或检查的系统设置 |
requestPermissions(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | PermissionOptions | 否 | 权限请求参数 | 默认请求全部运行时权限 | permissions / success / fail / complete |
| options.permissions | Array | 否 | 要请求的权限名 | 全部插件权限 | READ_PHONE_STATE / READ_CALL_LOG / READ_SMS / SEND_SMS / READ_CONTACTS |
registerCallListener(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | CallListenerOptions | 否 | 通话监听参数 | 无 | includePhoneNumber / matchRecorderOnEnd / recorderMatchWindowMs / success / fail / complete |
| options.includePhoneNumber | boolean | 否 | 是否尝试返回号码 | true | true / false |
| options.matchRecorderOnEnd | boolean | 否 | 挂断后是否尝试匹配录音 | false | true / false |
matchCallRecordings(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | MatchCallRecordingsOptions | 否 | 匹配参数 | 自动查询通话记录和录音 | callLogs / recorderFiles / windowMs / limit / success / fail / complete |
| options.windowMs | number | 否 | 匹配时间窗口 | 180000 | 无 |
| 字段 | 类型 | 说明 |
|---|---|---|
| score | number | 综合匹配分 |
| matchedBy | string | phone+time / phone / time / none |
| timeDeltaMs | number | 录音文件与通话记录时间差 |
| phoneScore | number | 号码匹配分 |
| timeScore | number | 时间匹配分 |
| confidence | string | high / medium / low / none |
sendSmsSilent(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SendSmsOptions | 是 | 短信发送参数 | 无 | phoneNumber / message / requestCode / success / fail / complete |
| options.phoneNumber | string | 是 | 手机号 | 无 | 无 |
| options.message | string | 是 | 短信内容 | 无 | 无 |
| options.requestCode | number | 否 | 用于关联短信回执 | 自动生成 | 无 |
getContacts(options) / addContact(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options.keyword | string | 否 | 联系人姓名关键词 | 无 | 无 |
| options.displayName | string | 新增时是 | 联系人姓名 | 无 | 无 |
| options.phoneNumbers | Array | 否 | 手机号列表 | [] |
无 |
| options.emails | Array | 否 | 邮箱列表 | [] |
无 |
| options.note | string | 否 | 备注 | 空字符串 | 无 |
支持平台
| 平台 | 是否支持 | 说明 |
|---|---|---|
| Android App | 支持 | 支持通话监听、通话记录、录音文件扫描匹配、短信、通讯录、前台服务 |
| iOS App | 部分支持 | 支持能力探测、系统确认拨号及预填正文的短信编辑器;不提供通话监听、通话记录、短信读取、静默短信、通讯录和系统录音文件访问 |
| Harmony App | 降级 | 提供能力探测和明确错误 |
| Web | 部分支持 | 支持 tel: / sms: 意图,其他高敏能力不支持 |
| 微信小程序 | 降级 | 提供能力探测和明确错误 |
| 支付宝小程序 | 降级 | 提供能力探测和明确错误 |
错误码
| 错误码 | 含义 | 说明 |
|---|---|---|
| 9040001 | unsupported | 当前平台或能力不支持 |
| 9040002 | permission denied | 权限未授权 |
| 9040003 | invalid argument | 参数错误 |
| 9040004 | context unavailable | Android 上下文不可用 |
| 9040005 | call listener unavailable | 通话监听不可用 |
| 9040006 | call log unavailable | 通话记录不可用 |
| 9040007 | recorder file unavailable | 录音文件不可用 |
| 9040008 | sms unavailable | 短信能力不可用 |
| 9040009 | contact unavailable | 通讯录能力不可用 |
| 9040010 | foreground service unavailable | 前台服务不可用 |
| 9040012 | notification permission denied | 通知权限不足 |
| 9040018 | sms send failed | 短信发送失败 |
| 9040020 | restricted by system | 系统限制,通常需要默认电话应用或系统签名能力 |
注意事项
-
iOS 需制作并安装包含本插件的自定义基座;升级涉及原生实现时需重新制作。
dialPhone/callPhone的成功表示系统已接受打开拨号请求,不代表已接通;iOS 不支持指定 SIM 或静默拨号。sendSmsIntent的成功表示短信编辑器已展示,发送或取消由使用者决定,不代表短信已发送或送达;无法发短信、无法展示编辑器时会触发fail / complete。 -
iOS 的
success / fail / complete异步返回,complete在成功或失败回调后触发。不支持的操作返回9040001;查询和取消监听仍可返回明确的未注册、未运行或空列表状态。 -
静默短信、短信读取、通话记录、通讯录读取均属于高敏能力,发布前需要准备隐私政策和应用场景说明。
-
Android 10+ 对后台启动、通话录音和默认电话应用限制明显,接听/挂断只按 best-effort 返回,不承诺所有设备可用。
-
插件不会绕过系统权限,也不会直接录制蜂窝通话。
-
修改 Android 平台 UTS、权限、Manifest 或前台服务后,需要重新运行 Android 原生联编或重新打 Android 自定义基座。
发布门禁
D:\HBuilderX\plugins\node\node.exe scripts\check-lizhao-call-kit-enhancements.js
D:\HBuilderX\plugins\node\node.exe scripts\check-lizhao-call-kit-release-gate.js
D:\HBuilderX\plugins\node\node.exe scripts\check-lizhao-call-kit-harmony-exports.js
真机验收全部完成后再运行严格发布门禁:
D:\HBuilderX\plugins\node\node.exe scripts\check-lizhao-call-kit-release-gate.js --require-runtime-verified
作者系列 UTS 插件
以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6486
赞赏 5
下载 12586883
赞赏 1949
赞赏
京公网安备:11010802035340号