更新记录
1.0.1(2026-06-05) 下载此版本
修改插件名
1.0.0(2026-06-05) 下载此版本
- 初始发布
- 支持监听:来电响铃、去电拨号、接听、挂断(含时长)、未接来电
- 权限申请:READ_PHONE_STATE
- 基于 TelephonyManager + UTS 原生混编
- 支持 uni-app (Vue3) / uni-app x Android 平台
平台兼容性
uni-app(5.07)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|
| × | √ | × | × | √ | - | 5.0 | 1.0.0 | × | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.07)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | × | × | × |
sam-phone-call-listener
Android 电话状态监听 UTS 原生插件(免费)
监听电话状态:来电响铃、去电拨号、接听、挂断(含通话时长)、未接来电。
功能
- 查询 / 申请
READ_PHONE_STATE权限 - 监听来电响铃
ringing - 监听去电拨号
dialing - 监听通话接通
answered - 监听通话挂断
hangup(附带通话时长) - 监听未接来电
missed
平台支持
| Android | 最低版本 |
|---|---|
| √ | API 21+ |
iOS / Web / 小程序暂不支持。
安装
HBuilderX 中直接导入 sam-phone-call-listener 插件,或:
# 通过 uni_modules 安装
npm install @dcloudio/uni-sam-phone-call-listener
使用方法
导入
import {
hasPhoneStatePermission,
requestPhoneStatePermission,
openPhonePermissionSettings,
startPhoneCallListener,
stopPhoneCallListener
} from '@/uni_modules/sam-phone-call-listener'
完整示例
// 1. 检查权限
if (!hasPhoneStatePermission()) {
// 2. 申请权限
requestPhoneStatePermission((granted) => {
if (!granted) {
// 引导用户去系统设置开启
openPhonePermissionSettings()
return
}
// 3. 开始监听
startListening()
})
} else {
// 已有权限,直接监听
startListening()
}
function startListening() {
startPhoneCallListener((event) => {
switch (event.type) {
case 'ringing':
console.log('来电响铃:', event.phoneNumber)
break
case 'dialing':
console.log('去电拨号:', event.phoneNumber)
break
case 'answered':
console.log('通话接通:', event.phoneNumber)
break
case 'hangup':
console.log(
'通话结束:',
event.phoneNumber,
'方向:', event.direction, // 'incoming' | 'outgoing'
'时长:', event.duration, '秒',
'时间:', new Date(event.timestamp).toLocaleString()
)
break
case 'missed':
console.log('未接来电:', event.phoneNumber)
break
}
})
}
// 页面卸载时停止监听
onUnload(() => {
stopPhoneCallListener()
})
事件参数
| 字段 | 类型 | 说明 |
|---|---|---|
type |
string | 事件类型:ringing / dialing / answered / hangup / missed |
phoneNumber |
string | 电话号码(Android 10+ 可能为空字符串) |
direction |
string | 通话方向:incoming / outgoing |
duration |
number | 通话时长(秒),仅在 hangup 时有意义 |
timestamp |
number | 事件发生时间戳(毫秒) |
API 说明
| 函数 | 说明 |
|---|---|
hasPhoneStatePermission() |
检查是否已授予 READ_PHONE_STATE 权限 |
requestPhoneStatePermission(callback) |
请求 READ_PHONE_STATE 权限 |
openPhonePermissionSettings() |
打开系统权限设置页面 |
startPhoneCallListener(listener) |
开始监听电话状态,返回 boolean 表示是否启动成功 |
stopPhoneCallListener() |
停止监听 |
权限说明
插件需要在 AndroidManifest.xml 中声明:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
注意:如果你的项目
manifest.json已经声明了此权限,可以删除插件中的AndroidManifest.xml。
注意事项
- Android 10+ 电话号码为空:系统出于隐私保护,
onCallStateChanged回调中的电话号码可能为空。去电号码当前版本暂未捕获(需要PROCESS_OUTGOING_CALLS权限,Android 14 已弃用)。 - 主动挂断 vs 对方挂断:Android 公共 API 无法区分是本机挂断还是对方挂断。
@UTSJS.keepAlive:插件已配置回调保活注解,确保监听不会被 GC 回收。- 标准基座提示:插件依赖原生配置(
AndroidManifest.xml),首次使用标准基座运行时会提示「原生配置不能生效」,不影响功能。如需完全生效可制作自定义调试基座。 - 后台限制:Android 14+ 对后台应用获取电话状态有更严格限制,建议在前台时使用。
已知限制
PhoneStateListener在 Android 14+ 标记为 deprecated,但仍是兼容性最好的方案- 小米/MIUI 等定制系统可能因省电策略延迟或阻止状态回调,建议在真机前台测试
开源协议
MIT

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 1
赞赏 0
下载 12155071
赞赏 1918
赞赏
京公网安备:11010802035340号