android拦截黑名单电话和短信
在之前的这篇博客中,https://blog.csdn.net/huangbaokang/article/details/112334420
一、手工调用Service来拦截黑名单号码
我们讲解了手工挂断电话,使用的是AIDL,通过点击按钮来触发挂断电话的功能。接下来我们实现自动挂断电话,到达拦截黑名单电话的功能。
具体原理是通过广播接收器,通过注册开机的广播,启动一个挂断电话的服务即可,我们分两步,手工启动挂断电话的服务,此处不使用广播,后面将讲解。
布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}" ><Buttonandroid:id="@+id/btn_main_start"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="启动来电监听"android:onClick="startListenCall" /><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="停止来电监听"android:onClick="stopListenCall" android:layout_below="@id/btn_main_start"/></RelativeLayout>
处理Activity类,很简单,直接启动服务,和中断服务
package com.hbk.service;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void startListenCall(View v) {startService(new Intent(this, ListenCallService.class));}public void stopListenCall(View v) {stopService(new Intent(this, ListenCallService.class));}
}
我定义ListenCallService类,并使用PhoneStateListener来监听不同打电话的状态,重点在处理响铃状态。
package com.hbk.service;import java.lang.reflect.Method;import com.android.internal.telephony.ITelephony;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;public class ListenCallService extends Service {private TelephonyManager tm;private PhoneStateListener listener = new PhoneStateListener() {// 当通话状态发生改变时调用/*** Callback invoked when device call state changes.** @see TelephonyManager#CALL_STATE_IDLE* @see TelephonyManager#CALL_STATE_RINGING* @see TelephonyManager#CALL_STATE_OFFHOOK*/public void onCallStateChanged(int state, String incomingNumber) {switch (state) {case TelephonyManager.CALL_STATE_IDLE:// 空闲 (挂断电话/未来电之前)Log.e("TAG", "空闲 (挂断电话/未来电之前)");break;case TelephonyManager.CALL_STATE_RINGING:// 响铃Log.e("TAG", "响铃");// 如果来电电话是黑名单号(110), 就挂断电话if ("110".equals(incomingNumber)) {try {endCall();} catch (Exception e) {e.printStackTrace();}}break;case TelephonyManager.CALL_STATE_OFFHOOK:// 接通Log.e("TAG", "接通");break;default:break;}}};@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}/*** 挂断电话* @throws Exception */private void endCall() throws Exception {// 通过反射调用隐藏的API// 得到隐藏类的Class对象Class c = Class.forName("android.os.ServiceManager");// 得到方法所对应的Method对象Method method = c.getMethod("getService", String.class);// 调用方法IBinder iBinder = (IBinder) method.invoke(null,Context.TELEPHONY_SERVICE);// 得到接口对象ITelephony telephony = ITelephony.Stub.asInterface(iBinder);// 结束通话telephony.endCall();}@Overridepublic void onCreate() {super.onCreate();Log.e("TAG", "Service onCreate()");// 得到电话管理器tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);// 监听电话状态tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);}@Overridepublic void onDestroy() {super.onDestroy();Log.e("TAG", "Service onDestroy()");// 停止电话监听tm.listen(listener, PhoneStateListener.LISTEN_NONE);}}
如上文件需要根据AIDL文件生成代码,才能在ListenCallService 中进行引用。
清单文件中增加如下两个权限
<!-- 挂断电话 --><uses-permission android:name="android.permission.CALL_PHONE"/><!-- 读取电话状态 --><uses-permission android:name="android.permission.READ_PHONE_STATE"/>
并注册服务
<service android:name="com.hbk.service.ListenCallService"></service>
测试点击启动监听,然后在模拟器中对110进行打电话,发现没有电话呼入,但在通话记录里却可以看到记录。
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程
二、使用广播进行黑名单号码短信拦截
解析来我们介绍使用广播来实现黑名单号码的电话及短信拦截。
新建一个BootReceiver来接收开机完成广播的receiver
package com.hbk.service;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;/*** 接收开机完成广播的receiver**/
public class BootReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//启动电话监听的servicecontext.startService(new Intent(context, ListenCallService.class));}}
并在清单文件中增加如下权限
<!-- 接收开机完成广播的权限 --><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
注册广播,action name是固定写法,记住即可
<receiver android:name="com.hbk.service.BootReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver>
工作中常用的广播
同理,我们定义一个拦截黑名单短信的receiver
package com.hbk.service;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;/*** 接收来了短信的广播的receiver**/
public class SmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//1. 得到intent短信数据, 并封装为短信对象smsMessageBundle extras = intent.getExtras();Object[] pdus = (Object[])extras.get("pdus");SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])pdus[0]);//2. 取号码String number = smsMessage.getOriginatingAddress();String content = smsMessage.getMessageBody();Log.e("TAG", number +" : "+content);//3. 判断是否是黑名单号if("110".equals(number)) {//4. 如果是, 中断广播(拦截短信)abortBroadcast();Log.e("TAG", "拦截到一个黑名单短信");}}}
在清单文件中进行配置
<receiver android:name="com.hbk.service.SmsReceiver"><intent-filter android:priority="2147483647"><action android:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter></receiver>
通过SmsMessage 对象去取出电话号码及短信内容。测试的话,先部署应用,然后关掉虚拟机,重新开机进行测试,开机的时候可以看到黑名单号码的广播接收器生效了。
android拦截黑名单电话和短信相关推荐
- Android 12.0Launcher3 电话和短信app图标显示未读短信和未接来电的条数
1.概述 在12.0产品开发中,最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动lau ...
- Android电话和短信拦截器
1. 引言 在Android中实现电话和短信拦截器功能,这个是我从网上找的,并非自己实现,使用时需要修改一下代码(需要拦截的号码),测试已经通过,工程結构和实现如下. 2. 工程结构 3. 功能实现 ...
- android 短信接口收拦截,给手机装“来点黑名单” 拒绝垃圾短信和电话
给手机装个"来电黑名单" 有了手机之后,不自觉就被卷入信息漩涡中间.面对排山倒海的垃圾短信和骚扰电话,我们如何能拒绝?或者是"礼貌地拒绝"?其实,对于类似QQ. ...
- Android6.0 源码添加黑名单拦截电话和短信记录
[目标] 在上一篇 Android6.0 源码增加黑名单功能 的基础上增加黑名单和短信拦截记录 [实现] 黑名单数据库和拦截记录数据库上一篇已经增加完成,这就需要我们在电话和短信分发的地方去判断号码是 ...
- 手机黑名单,拦截电话和短信,清除通话记录
首先对功能简单分析一下,既然是黑名单功能,那么肯定是写在服务里面,需要一直在后台运行着. 一.拦截短信 短信在接收的时候,广播发送,监听广播接受者,拦截短信(有序广播) 将广播的优先级级别提高到最高 ...
- Android 用代码实现防打扰【能够屏蔽电话和短信】
Android 实现电话和短信拦截的功能如下: 1.实现广播接口,即[BroadcastReceiver] 检测到电话来时,则挂断电话,同时保存来电的电话号码,一做特殊处理[发信息或者一段时间后提示用 ...
- Android 来电(包括铃声),短信拦截的实现方法
关于拦截的文章我之前写过拦截Back按键和Home按键的处理方法,今天就开发过程中关于电话,短信的拦截做一个总结. 一:拦截来电的功能实现 现在的Android版本已经把Phone类的相关API给隐藏 ...
- Android开发学习之电话、短信、联系人
作为一部手机,最重要的功能当属电话.短信.联系人了,所以今天想和大家分享的是关于Android电话.短信.联系人这块的API接口. 1.通话记录的获取 List<TelePhoneRecord& ...
- Android监听消息(二)——电话及短信监听
学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2747字,预计阅读6分钟 前言 前面一篇<Android监听消息(一)--应用消息捕获>我们使用Notificat ...
- [高通SDM450][Android9.0]禁止电话、短信呼入
文章目录 开发平台基本信息 问题描述 解决方法 禁止电话.短信呼入 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 公司有一款设备,作 ...
最新文章
- 2022-2028年中国康复辅具行业市场研究及前瞻分析报告
- MarkDown 流程图 ... ...
- 李嘉诚拥有8500亿资产, 是真正的世界首富,为何要藏富?
- 抽奖系统的流量削峰方案
- arduino COM口被占用问题解决
- 基于OK6410开发板Uboot源码简单分析
- linux杂谈(十七):iscsi存储分离技术
- 【ArcGIS|空间分析】第七届全国大学生GIS技能大赛——上午
- 库伦法-锂电池容量计量
- 行测题中逻辑判断题的规律
- graphpad做单因素方差分析_GraphPad中国官网 - Prism 8 统计指南 - 单因素方差分析
- 翻译Allegorithmic的文档《THE PBR GUIDE - PART 1》
- Python爬虫进阶--js逆向-某天下与某某二手房密码加密分析
- Python-函数入参和全局变量
- linux打开python3_号外:RIDE 可以在 linux+python3 的环境中运行啦!
- MFC实现简单连续加减计算器
- iOS字体像数与磅的对应关系
- python2048游戏撤销上一部功能怎么实现_python 实现 2048 游戏 (一)
- 机器学习:python实现LDA降维算法
- Linux 下安装 Tomcat 6(zhuang)
热门文章
- 一信通短信接口对接_实例分享:验证码短信接口如何对接?接口api哪个好用?...
- TP5路由知识简单个人汇总
- android自定义pickerview,一个非常好用的Android PickerView库
- 群晖NAS教程(十五)、利用Web Station安装typecho博客
- Java实战项目,附带源码+视频教程。
- 推荐四款实用的局域网文件夹同步工具
- python遗传算法解简单整数规划与原理探究
- 实证分析 | 中介效应检验原理与Stata代码实现
- 《趣谈网络协议》课程学习笔记
- Boss说:你要是能搞懂这六个分布式技术栈,我给你薪资翻倍