更新记录
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 示例。
1.0.4(2026-06-17)
- 修复 Android 控制台 deprecated warning:
PhoneStateListener、onCallStateChanged、SubscriptionInfo.getNumber()、TelephonyManager.getLine1Number() 不再直接出现在 UTS 入口中。
- 新增 Kotlin 原生桥
CallKitPhoneStateBridge.kt,Android 12+ 使用 TelephonyCallback.CallStateListener,Android 12 以下在桥内部保留 PhoneStateListener 兼容分支。
- 静默短信发送改为通过 Kotlin 桥封装
sendTextMessage(),UTS 文件移除 SmsManager.getDefault() 直接调用。
- 修复短信 PDU 解析 helper 返回动态类型导致
getOriginatingAddress / getMessageBody / getTimestampMillis 无法识别的问题。
- 本版本仅调整 Android 平台实现和发布资料,不修改公共接口、web/mp/app-plus/iOS 实现或 uni-app 示例。
1.0.2(2026-06-15)
- 新增 Android 静默短信发送回执:
sendSmsSilent 提交系统后,通过 onCallKitEvent('sent') 和 onCallKitEvent('delivered') 返回发送/送达状态。
- 新增事件过滤能力:
onCallKitEvent(eventName, callback) 支持按 incoming / ended / received / sent / delivered 等事件名单独订阅。
- 增强通话录音匹配结果,返回
matchedBy / timeDeltaMs / phoneScore / timeScore / confidence,方便客户判断匹配可信度。
- 增强 Android 通讯录读写,读取联系人时返回邮箱和备注,新增联系人时支持写入邮箱和备注。
- 补齐
scripts/check-lizhao-call-kit-release-gate.js 发布门禁,并新增 scripts/check-lizhao-call-kit-enhancements.js 增强守卫。
- 重写 README 接入顺序,按“最小接入 -> 通话监听 -> 录音匹配 -> 短信回执 -> 通讯录 -> 前台服务 -> API 查询”循序渐进说明。
- 示例页新增短信监听、静默短信回执、事件过滤、录音匹配、新增联系人和权限设置页测试入口。
查看更多
平台兼容性
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,不会伪造成功。
当前版本:1.0.5
1.0.5 uni-app x 示例 options 强转修复
本版本修复 uni-app x Android 示例页中页面局部 DemoOptions 强转为插件导出 options 类型导致的运行时崩溃。示例页现在直接构造 CallKitBaseOptions 和 PermissionOptions 强类型对象,避免 Android 运行时出现 DemoOptions cannot be cast to CallKitBaseOptions。
1.0.4 Android deprecated warning 收口
本版本将 Android 通话监听、号码读取和静默短信发送中的 deprecated 符号收敛到 Kotlin 原生桥内部,UTS 入口不再直接暴露 PhoneStateListener、SmsManager.getDefault() 等 warning 来源。Android 12+ 使用 TelephonyCallback,低版本在 Kotlin 桥内保留兼容分支。
从简单到复杂
| 接入场景 |
推荐能力 |
说明 |
| 只需要拨号或打开短信页 |
dialPhone / sendSmsIntent |
优先使用系统意图,接入成本最低 |
| 需要判断当前平台能做什么 |
getCallKitCapabilities |
先拿能力矩阵,再决定展示哪些按钮 |
| 需要判断当前 Android 设备是否适配 |
checkDeviceCompatibility |
返回机型、SDK、targetSdk、SIM 卡槽、媒体权限和系统限制提示 |
| 需要通话监听和通话记录 |
requestPermissions / registerCallListener / getCallLogs |
Android 自定义基座和用户授权后使用 |
| 需要匹配通话录音文件 |
checkCallAutoRecorder / getAllRecorderFiles / matchCallRecordings |
插件不直接录音,只扫描系统/OEM 录音文件并匹配 |
| 需要短信业务闭环 |
registerSmsListener / sendSmsSilent / onCallKitEvent |
静默短信支持短信回执事件,依赖运营商和系统策略 |
| 需要客户资料写入 |
getContacts / addContact |
支持手机号、邮箱和备注 |
完整示例源码路径:uni_modules/lizhao-call-kit/example/index.vue。
最小可运行示例
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 |
扫描录音文件 |
是 |
MANAGE_EXTERNAL_STORAGE |
扫描厂商私有录音目录 |
是,且需用户手动授权 |
POST_NOTIFICATIONS |
Android 13+ 前台通知 |
是 |
FOREGROUND_SERVICE |
前台服务 |
是 |
FOREGROUND_SERVICE_DATA_SYNC |
Android 14+ dataSync 类型前台服务 |
是 |
通话监听
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,
getAllRecorderFiles,
matchCallRecordings
} from '@/uni_modules/lizhao-call-kit'
checkCallAutoRecorder({
success(res) {
console.log('系统自动录音状态', res)
}
})
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)
}
})
短信监听与短信回执
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 |
当前录音扫描应使用的媒体权限,Android 13+ 通常为 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 |
系统限制,通常需要默认电话应用或系统签名能力 |
注意事项
- 静默短信、短信读取、通话记录、通讯录读取均属于高敏能力,发布前需要准备隐私政策和应用场景说明。
- 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 |
模拟器环境检测、风险评分与证据 |
查看插件 |