Android 用代码实现防打扰【能够屏蔽电话和短信】
来源:互联网 发布:淘宝有退款率吗 编辑:程序博客网 时间:2024/04/29 14:10
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"; @Override public 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>
完成
注意:该功能有点流氓,需要用到合适的地方
0 0
- Android 用代码实现防打扰【能够屏蔽电话和短信】
- android拨打电话和发送短信核心代码
- android 短信和电话拦截
- android 短信和电话拦截
- android 电话和短信api
- Android 调用电话和短信
- Android 电话和短信拦截
- Android短信和拨打电话
- Android实现电话拨号器和短信发送器
- android中拨打电话和短信发送的实现
- Android中实现拨打电话和发送短信
- Android实现电话拨号器和短信发送器
- 调用系统代码实现电话短信功能
- Android 短信发送与拨打电话实现
- Android电话和短信拦截器
- Android电话和短信拦截器
- android电话拔号器和短信发送器
- android调用系统电话和短信
- python爬虫安装scrpay时遇到问题及解救方式
- 手机访问网站自动跳转到手机版
- C++第3次实验-项目一
- mysql账号增删改、数据导入导出命令举例
- node.js中如何使用mongodb数据库
- Android 用代码实现防打扰【能够屏蔽电话和短信】
- Android实现修改状态栏颜色
- dp能适配吗???
- POJ 3255 Roadblocks 次短路问题 (dijjkstra算法)
- CF-631-.Interview-水题
- centos7安装tigervnc经验
- Spring AOP总结
- 每年每月有几天
- 机器学习第一篇——机器学习的动机与应用