Android开发——短信电话拦截/接听电话
1.短信拦截
首先需要声明的是,Android4.4版本以上,如果想做到短信拦截,必须成为default sms,把所有短信相关的功能都包揽了,然后再做短信拦截。但这种做法,适配性和兼容性的工作是非常巨大的,短信、wapush(多种)、彩信、单双卡等等,相当于要求短信拦截类的软件要集成一个功能非常完善的通讯录类应用的功能。但是即使拦截不到短信,同样是可以接收到短信的内容。4.4版本以前没有问题。
短信广播接收者就不用多说了,代码如下所示,业务逻辑一般通过数据库查询实现,通过继承SQLiteOpenHelper类构建数据库,再自定义一个提供数据库增删改查的Dao类即可。
private class InnerSmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Object[] objs = (Object[]) intent.getExtras().get("pdus");for (Object obj : objs) {SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);String sender = smsMessage.getOriginatingAddress();Log.i("InnerSmsReceiver","收到了来自这个人的短信:"+sender);//通过业务逻辑判断是否拦截sender By abortBroadcast();}}}
2.电话拦截/接听
2.1 拦截电话,首先需要监听电话的状态。这个我们最好还是写在服务里吧。
public class InterceptService extends Service{private TelephonyManager tm;private MyListener listener;@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {//实例化电话监听器listener = new MyListener();tm =(TelephonyManager)getSystemService(TELEPHONY_SERVICE);tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);super.onCreate();}@Overridepublic void onDestroy() {tm.listen(listener,PhoneStateListener.LISTEN_NONE);//什么也不监听super.onDestroy();}private class MyListener extends PhoneStateListener{@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_RINGING: //零响状态Log.i("InnerSmsReceiver",incomingNumber);endCall(); //根据业务逻辑判断后调用挂断电话的逻辑break;}}}
}
2.1 拦截电话的逻辑可以仿照源码写。首先拿到Binder对象。
IBinder ibinder = ServiceManager.getService(TELEPHONY_SERVICE);
2.2 由于ServiceManager被系统隐藏了,所以可以用反射的方法拿到。
Class clazz = InterceptService.class.getClassLoader().loadClass("android.os.ServiceManager");
Method method = clazz.getDeclaredMethod("getService", String.class);
IBinder ibinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);
2.3 接着就可以调用Binder里的方法了。不仅可以拿到endCall()挂断电话的方法,也可以拿到answerRingCall()接听电话的方法。这样就完成了整个挂断电话的逻辑。
ITelephony.Stub.asInterface(ibinder).endCall();
//用于接听电话 ITelephony.Stub.asInterface(ibinder).answerRingingCall();
Android开发——短信电话拦截/接听电话相关推荐
- android自动回复退订,Android实现短信自动回复,挂电话
原标题:Android实现短信自动回复,挂电话 简单功能,配置一下ITelephoney,ITelephony这个接口不能直接用的. 需要先在src下新建包com.android.internal.t ...
- Android开发短信拦截与读取,消息通知Notification
截获系统广播,读取消息,若联系人存在于通信录中,则让消息继续传播:若属于陌生号码,则中断消息,同时把信息显示在自己的程序中. 拦截器代码如下: public class SMSInterceptRec ...
- android 开发 短信,Android开发之短信发送
今天要讲的是使用Android开发发送短信程序.我们先来看下运行效果 图(1) ...
- Android开发短信备份小例子
主要是使用内容提供者ContentProvider #1.在activity_main.xml布局文件中添加写sdcard权限,并添加读短信的权限 <RelativeLayout xmlns:a ...
- 聚合数据短信验证码接口实现 Android开发短信验证码
在说Android中的短信验证码这个知识点前,我们首先来了解下聚合数据 聚合数据介绍 聚合数据是一家国内最大的基础数据API提供商,专业从事互联网数据服务.免费提供从天气查询.空气质量.地图坐标到金融 ...
- android 开发短信接收器
1.在最大的配置文件中配置权限: 2.在类中写上如下方法即可
- android 开发 短信 气泡,Android Q之气泡弹窗的实现示例
// 创建气泡intent Intent target = new Intent(mContext, BubbleActivity.class); PendingIntent bubbleIntent ...
- android 黑名单 短信拦截
上一篇讲了电话拦截,现在讲一下短信拦截. 由于android4.4以上,提高了系统的安全性,同时,也对短信的处理进行了保护 先来讲一下在android4.4以下的短信拦截机制 在android4.4一 ...
- Android从普通发送和接收短信到对短信进行拦截
概述: 说实话,关于Android中对短信的一些相关操作是一个比较入门的东西.那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Andro ...
最新文章
- Spring Filter过滤器,Spring拦截未登录用户权限限制
- 在Centos6.5下安装AR8161网卡驱动
- Fragment 源码解析
- ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库
- PWN-COMPETITION-HGAME2022-Week4
- java mysql访问类_java 访问数据库公共类
- 多线程的那点儿事(之数据同步)
- opencv 编译安装时出现报错 modules/videoio/src/cap_ffmpeg_impl.hpp:585:34: error: ‘AVStream {aka struct AVStre
- catalina.out 日志切割及定时清理
- 初一数学教材人教版_【期中试卷+知识点总结】初中初一初二初三年级各科期中试卷+知识点总结...
- 计算机自带的画图软件工具介绍,电脑自带画图软件
- 【MATLAB图像读取】
- Docker 启动报错 Error starting daemon: SELinux is not supported with the overlay2 ...alse)
- VSCODE 远程编译调试ARM开发板
- 520送女生什么礼物比较好?一口气推荐六款,快收藏
- 阅读源码的经验总结,以进一步的提升自己,加油小甜妮儿
- linux 子接口 非vlan,VLAN之间通过子接口通信配置示例
- 初入测试如何编写测试用例?从3个方面带你写一个合格的测试用例
- 对人的外部评价与内部评价
- [资源]Python资源大全中文版