Android 用代码实现防打扰【能够屏蔽电话和短信】
Android 实现电话和短信拦截的功能如下:
1.实现广播接口,即【BroadcastReceiver】
package com.xxx.phone;import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;import com.android.internal.telephony.ITelephony;//见第二点
import android.telephony.SmsMessage;import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;/*** 监听电话状态,挂断特定情况下的电话** */
public class PhoneReceiver extends BroadcastReceiver {private TelephonyManager telephonyManager;private final String PHONE_RECEIVER_ACTION ="android.intent.action.PHONE_STATE";private final String MSM_RECEIVER_ACTION ="android.provider.Telephony.SMS_RECEIVED";@Overridepublic void onReceive(Context context, Intent intent) {telephonyManager = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);String action = intent.getAction();//判断是否电话还是信息Log.i("PhoneReceiver", "获取action:" + action);if(PHONE_RECEIVER_ACTION.equals(action)){//处理电话防打扰telephone(context,intent);}else if(MSM_RECEIVER_ACTION.equals(action)){messageInfo(context,intent);}}/*** 挂断电话* ITelephony 对象,需要aidl 和系统service 通信,挂断电话* 注:aidl文件 会自动生成相应的java 文件*/private boolean endCall() {Class<TelephonyManager> c = TelephonyManager.class;try {Method getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[]) null);getITelephonyMethod.setAccessible(true);ITelephony iTelephony = (ITelephony) getITelephonyMethod.invoke(telephonyManager, (Object[]) null);iTelephony.endCall();return true;}catch (Exception e) {Log.e("PhoneReceiver","反射获取ITelephony 对象异常",e);}return false;}/*** 电话防打扰* 对于一段时间内多次连续拨打,则放行【待实现】*/private void telephone(Context context, Intent intent){telephonyManager = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);switch(telephonyManager.getCallState()){//响铃case TelephonyManager.CALL_STATE_RINGING:String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);Log.i("PhoneReceiver", "当前电话号码:" + number);endCall();}break;}}
//参照网上的代码拦截短信private void messageInfo(Context context, Intent intent){//获取intent参数Bundle bundle=intent.getExtras();//判断bundle内容if (bundle!=null){//取pdus内容,转换为Object[]Object[] pdus=(Object[])bundle.get("pdus");String format = intent.getStringExtra("format");//解析短信SmsMessage[] messages = new SmsMessage[pdus.length];for(int i=0;i<messages.length;i++){byte[] pdu=(byte[])pdus[i];messages[i]=SmsMessage.createFromPdu(pdu);}//解析完内容后分析具体参数for(SmsMessage msg:messages) {//获取短信内容String content=msg.getMessageBody();String sender=msg.getOriginatingAddress();Date date = new Date(msg.getTimestampMillis());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String sendTime = sdf.format(date);Log.i("PhoneReceiver","电话["+sender+"] 内容:"+content+"时间:"+sendTime);}}}
}
2. 挂断电话,endCall()
由于系统将挂断电话的api隐藏了,因此需要是有反射机制来获取,ITelephony ,但是其引用需要使用aidl来和系统服务通信,创建好相应的包路径,然后创建aidl 文件 如:
具体内容参见Android源码或者 参见ITelephony.aidl ,android studio 中 make project 就会生成相应的java代码,然后项目中就可以使用了
3.注册广播
在AndroidManifest.xml 注册
<!-- 注册监听手机状态 --><receiver android:name="com.xxx.phone.PhoneReceiver"><intent-filter android:priority="1000" ><action android:name="android.intent.action.PHONE_STATE" /><action android:name="android.provider.Telephony.SMS_RECEIVED" /></intent-filter></receiver>
4.添加权限
<!-- 电话权限 --><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> <!-- 短信监控权限 --><uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
Android 用代码实现防打扰【能够屏蔽电话和短信】相关推荐
- Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,
Android运行时权限设置帮助类BaseActivity 一.电话权限 package com.glandroid.smssen ...
- Arduino+sim800C家居安防火灾报警 拨打电话 发送短信例程程序
家居安防报警器,参考程序. 火灾报警 涉及用sim800c发短信,拨打电话通知. 接线: Sim800c 3.3V -> Arduino 3.3V Sim800c G ...
- setup 阶段 屏蔽电话和短信
来电和接收到短信的流程, 在 基本原理都是,底层发广播上层接收处理 (手机管家的framework 层相关处理也可以在这里) //在开机向导阶段,禁止电话接入packages/services/Tel ...
- Android开发学习之电话、短信、联系人
作为一部手机,最重要的功能当属电话.短信.联系人了,所以今天想和大家分享的是关于Android电话.短信.联系人这块的API接口. 1.通话记录的获取 List<TelePhoneRecord& ...
- Android监听消息(二)——电话及短信监听
学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2747字,预计阅读6分钟 前言 前面一篇<Android监听消息(一)--应用消息捕获>我们使用Notificat ...
- android stuido 如何使用SIM2或双SIM卡提交短信
Android studio 使用默认SIM卡发送短信的代码非常简单 SmsManager.getDefault().sendTextMessage("电话号码", null, & ...
- Android电话和短信拦截器
1. 引言 在Android中实现电话和短信拦截器功能,这个是我从网上找的,并非自己实现,使用时需要修改一下代码(需要拦截的号码),测试已经通过,工程結构和实现如下. 2. 工程结构 3. 功能实现 ...
- Android通讯录管理(获取联系人、通话记录、短信消息)(二)
Android通讯录管理(获取联系人.通话记录.短信消息)(二) 前言:上一篇博客介绍的是获取联系人的实现,本篇博客将介绍通话记录的实现. 同样的,你可以到这里下载源码:http://download ...
- Android通讯录管理(获取联系人、通话记录、短信消息)(三)
Android通讯录管理(获取联系人.通话记录.短信消息)(三) 这是通讯录管理的最后一篇,前面两篇已经把获取联系人和通话记录解决了,短息消息就相对来说要稍微复杂那么一点.我们先来看看效果图: 源码下 ...
最新文章
- Windows10完美安装VMTK(血管建模工具包)
- python3.5 mysql 库_Python 3.5 连接Mysql数据库(pymysql 方式)
- 团队作业9--beta版本测试报告及发布说明
- 成功解决ImportError: cannot import name ‘Imputer‘
- 温州大学《机器学习》课程代码(四)朴素贝叶斯
- iOS开发 - App程序启动原理
- java语言入门要多久,王者笔记!
- Python基础:内置异常(未完待续)
- 一些很有用的JS特效
- 统一的账号密码管理系统-信息安全课程设计
- HTML5视频自动循环播放
- Git常用命令及其作用_艾孜尔江撰
- 实验一 简单io应用—流水灯控制示例程序_【正点原子FPGA连载】第十章呼吸灯实验--领航者ZYNQ之linux开发指南...
- 荣联再次中标中国移动云资源池项目
- 中小企业发展电子商务的必要性
- 安卓启动中的PARTUUID
- 北京内推 | ​轻舟智航自动驾驶感知组招聘深度学习算法实习生
- ubuntu网络连接问题(网络图标不见了,ifconfig不显示ip....)
- 推荐排序模型2—— wideDeep及python(DeepCTR)实现
- Qt for Android 程序实现对手机文件的导入打开与导出保存
热门文章
- 男孩变成男人的标志35岁前必须做好的十件事情 [转]
- 2.3 Linux系统中的日志管理
- 3DMAX 阵列工具、间隔工具快捷键
- mac sed 正则表达式匹配空格
- 微信小程序自定义导航栏返回和标题
- 未来教育官网计算机一级考试题,2019年计算机一级考试MS Office操作试题021
- QChart绘图时出现警告:axisX has been explicitly marked deprecated here
- anaconda :An unexpected error has occurred. Conda has prepared the above report
- 关闭云平台、强制重启
- 旺店通·企业奇门与用友BIP对接集成查询退换管理连通销售退货单个保存(退换货生成销售退货(线下)-测试重传)