更新记录

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

注意事项

  1. Android 10+ 电话号码为空:系统出于隐私保护,onCallStateChanged 回调中的电话号码可能为空。去电号码当前版本暂未捕获(需要 PROCESS_OUTGOING_CALLS 权限,Android 14 已弃用)。
  2. 主动挂断 vs 对方挂断:Android 公共 API 无法区分是本机挂断还是对方挂断。
  3. @UTSJS.keepAlive:插件已配置回调保活注解,确保监听不会被 GC 回收。
  4. 标准基座提示:插件依赖原生配置(AndroidManifest.xml),首次使用标准基座运行时会提示「原生配置不能生效」,不影响功能。如需完全生效可制作自定义调试基座。
  5. 后台限制:Android 14+ 对后台应用获取电话状态有更严格限制,建议在前台时使用。

已知限制

  • PhoneStateListener 在 Android 14+ 标记为 deprecated,但仍是兼容性最好的方案
  • 小米/MIUI 等定制系统可能因省电策略延迟或阻止状态回调,建议在真机前台测试

开源协议

MIT

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android:READ_PHONE_STATE(读取电话状态,用于监听来电/去电/挂断事件)

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件不主动采集任何用户数据。电话状态信息仅在设备本地处理,不联网不存储不上传。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT License

Copyright (c) 2025

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

暂无用户评论。