一款 Android 来电拦截工具,支持按时间段、号码规则智能拦截来电。采用混合拦截策略,优先使用系统级 API,兼容多种设备。
- 多种匹配方式:精确匹配、前缀匹配、拦截海外号码、拦截座机号码、拦截所有来电
- 快捷时间段:全天、上午 (0-12)、中午 (12-14)、下午 (14-24) 一键选择,也支持自定义时间
- 多时间段:单条规则可配置多个时间段
- 跨午夜支持:如 23:00 - 06:00 的时间段也能正确判断
- 号码智能匹配:自动识别
+86、0086等国际区号前缀,手机号和座机号均可识别
按优先级自动尝试多种拦截方式,确保最大兼容性:
- 系统级 API —
TelecomManager.endCall()(设为默认拨号应用后可用,最稳定) - 反射 ITelephony — 传统方式(Android 8.x 及部分 9+ 设备)
- 反射 TelephonyManager — 备用方案(Android 12+)
- 添加、编辑、删除拦截规则
- 规则唯一性校验,防止重复添加
- 每条规则可单独启用/禁用
- 规则名称备注,方便管理
- 前台服务保活,通知栏常驻状态提示
- 开机自启(有启用规则时自动恢复服务)
- 暗色/亮色主题跟随系统
- Material Design 界面
- Android 9.0 (API 28) 及以上
- Android Studio (推荐) 或命令行 Gradle 构建
- JDK 17
File → Open → 选择 call-blocker 目录
Android Studio 会自动提示同步,点击 Sync Now。
- 用 USB 数据线连接安卓手机
- 手机上开启 开发者选项 → USB 调试
- 点击绿色三角 Run ▶ 运行
必须使用真机,模拟器无法测试来电拦截功能。
首次运行时授予所有请求的权限(电话、通话记录、通讯录、通知)。
点击界面上的 "设为默认电话应用" 按钮,按提示操作。设为默认拨号应用后,拦截效果最佳。
- 点击右下角 + 按钮
- 选择匹配方式:
- 精确匹配:输入完整号码(如
165xxxxxxxx拦截具体号码) - 前缀匹配:输入号码前缀(如
010拦截所有北京座机) - 拦截海外号码:自动识别非中国大陆号码
- 拦截座机号码:自动识别中国座机号段
- 拦截所有来电:不输入号码,拦截一切来电
- 精确匹配:输入完整号码(如
- 选择时间段:点击快捷按钮或自定义时间,可添加多个时间段
- 可选填写规则名称
- 点击 保存
点击规则右侧的 编辑图标(铅笔) 修改号码、时间等信息。
点击界面上方的 "启动拦截" 按钮,服务开始运行后会常驻通知栏。
call-blocker/
├── app/src/main/
│ ├── AndroidManifest.xml
│ ├── java/com/callblocker/app/
│ │ ├── model/
│ │ │ ├── BlockRule.java # 拦截规则数据模型
│ │ │ └── TimeRange.java # 时间范围模型
│ │ ├── db/
│ │ │ └── RuleDatabase.java # SQLite 数据库
│ │ ├── service/
│ │ │ ├── CallBlockService.java # 前台服务
│ │ │ └── HybridCallBlocker.java # 混合拦截策略
│ │ ├── receiver/
│ │ │ ├── CallBlockReceiver.java # 来电广播拦截
│ │ │ └── BootReceiver.java # 开机自启
│ │ └── ui/
│ │ ├── MainActivity.java # 主界面
│ │ ├── AddRuleDialogFragment.java # 添加/编辑规则对话框
│ │ └── RuleAdapter.java # 规则列表适配器
│ └── res/
│ ├── layout/ # 界面布局
│ └── values/ # 字符串、颜色、主题
├── build.gradle
├── settings.gradle
└── README.md
| 权限 | 用途 |
|---|---|
READ_PHONE_STATE |
获取来电状态 |
READ_CALL_LOG |
读取通话记录 |
READ_CONTACTS |
识别来电者姓名 |
ANSWER_PHONE_CALLS |
挂断来电(系统 API) |
MANAGE_OWN_CALLS |
挂断来电(Android 12+) |
MODIFY_PHONE_STATE |
挂断来电(反射方式) |
FOREGROUND_SERVICE |
前台服务保活 |
RECEIVE_BOOT_COMPLETED |
开机自启 |
POST_NOTIFICATIONS |
状态通知 |
- 语言:Java
- 最低 SDK:Android 9.0 (API 28)
- 目标 SDK:Android 14 (API 34)
- UI:Material Components for Android
- 数据库:SQLite (SQLiteOpenHelper)
- 构建:Gradle 8.0 + Android Gradle Plugin 8.1.0
- Android 10+ 限制:第三方应用直接挂断电话的能力受限,建议设为默认拨号应用以获得最佳效果
- 部分厂商定制系统(MIUI、ColorOS 等)可能有自己的电池优化策略,建议将本应用加入电池优化白名单
- 来电拦截需要监听
PHONE_STATE广播,部分系统可能会限制后台广播接收,请确保应用未被冻结
MIT