如何在android5.0拦截home键以后实现短信拦截的功能

Android中实现基本的短信拦截功能的代码示例
作者:matrix_xu
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Android中实现基本短信拦截功能的代码示例,这里之突出核心部分针对一个号码,当然程序扩充后可以制定更多拦截规则,需要的朋友可以参考下
1.在Manifest.xml里加"接收"SMS的权限
&uses-permission Android:name="android.permission.RECEIVE_SMS"&&/uses-permission&
2.在Manifest.xml里注册一个receive
&!-- 注册Receiver,并且设置优先级 --&
&receiver android:name=".AutoSMS" android:exported="false"&
&intent-filter android:priority="1000"&
&action android:name="android.provider.Telephony.SMS_RECEIVED"/&
&/intent-filter&
&/receiver&
3.定义一个短信接收类,并且重写onReceive
//继承BroadcastReceiver
public class AutoSMS extends BroadcastReceiver
private String TAG="AutSMS";
//广播消息类型
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
//覆盖onReceive方法
public void onReceive(Context context, Intent intent)
下面是完整的代码:
Manifest.xml:
&manifest xmlns:android="/apk/res/android"
package="com.xxh.autosms"
android:versionCode="1"
android:versionName="1.0" &
android:minSdkVersion="8"
android:targetSdkVersion="15" /&
&uses-permission android:name="android.permission.RECEIVE_SMS"/&
&application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" &
android:name=".MainActivity"
android:label="@string/title_activity_main" &
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
&!-- 注册Receiver,并且设置优先级 --&
&receiver android:name=".AutoSMS" android:exported="false"&
&intent-filter android:priority="1000"&
&action android:name="android.provider.Telephony.SMS_RECEIVED"/&
&/intent-filter&
&/receiver&
&/application&
&/manifest&
AutoSMS.java:
package com.xxh.
import java.text.SimpleDateF
import java.util.D
import android.content.BroadcastR
import android.content.C
import android.content.I
import android.os.B
import android.telephony.SmsM
import android.util.L
import android.widget.T
//继承BroadcastReceiver
public class AutoSMS extends BroadcastReceiver
private String TAG="AutSMS";
//广播消息类型
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
//覆盖onReceive方法
public void onReceive(Context context, Intent intent)
// TODO Auto-generated method stub
Log.i(TAG, "引发接收事件");
//StringBuilder body=new StringBuilder("");//短信内容
//StringBuilder sender=new StringBuilder("");//发件人
//先判断广播消息
String action = intent.getAction();
if (SMS_RECEIVED_ACTION.equals(action))
//获取intent参数
Bundle bundle=intent.getExtras();
//判断bundle内容
if (bundle!=null)
//取pdus内容,转换为Object[]
Object[] pdus=(Object[])bundle.get("pdus");
//解析短信
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i=0;i&messages.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);
//TODO:根据条件判断,然后进一般处理
if ("10060".equals(sender))
// 屏蔽手机号为10060的短信,这里还可以时行一些处理,如把这个信息发送到第三人的手机等等。
//TODO:测试
Toast.makeText(context, "收到10060的短信"+"内容:"+content, Toast.LENGTH_LONG).show();
//对于特定的内容,取消广播
abortBroadcast();
Toast.makeText(context, "收到:"+sender+"内容:"+content+"时间:"+sendTime.toString(), Toast.LENGTH_LONG).show();
}//if 判断广播消息结束
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具android中短信拦截问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
android中短信拦截问题
上传于|0|0|文档简介
&&适合android学习者
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华
众所周知Android在4.4上增加了不少安全措施,除了把SELinux设置为enforce外,在短信方向也加强了限制。4.4之后,新增了一个default sms的机制,详细的描述,可以参考我的另一篇文章《谈谈4.4中的新增功能对安全类软件的影响》。简而言之,就是如果要在4.4之后实现短信拦截功能,就必须成为default sms,把所有短信相关的功能都包揽了,然后再做短信拦截。但这种做法,适配性和兼容性的工作是非常巨大的,短信、wapush(多种)、彩信、单双卡等等,相当于要求短信拦截类的软件要集成一个功能非常完善的通讯录类应用的功能。那么,是否有一种方法,可以在不成为default sms的同时也可以对短信进行&写操作&(这可是让4.4一下子回到解放前啊。。。。)? 答案是有的。XDA大牛有人发现了一种比较讨巧的方法,原文可以参考这里。原理很简单,主要是利用4.2+后的添加的App Ops权限管理功能,在MESSAGE的TAB中找到自己的App,并进入相应的权限管理界面,如下图所示,FinalDemo是我自己测试的一个DEMO: &留意到Write SMS/MMS的开头,默认是OFF的,但我们可以把它打开。打开之后,我们就可以通过监控短信变化的方法实现短信拦截了,我也写了个简单的测试代码,测试成功,把代码和相关的配置也放了来吧&&打开App Ops的代码Intent intent = new Intent(Intent.ACTION_MAIN);ComponentName cn = new ComponentName(&com.android.settings&, &com.android.settings.Settings&);intent.setComponent(cn);intent.putExtra(&:android:show_fragment&, &com.android.settings.applications.AppOpsSummary&);startActivity(intent);Manifest.xml的配置&?xml version=&1.0& encoding=&utf-8&?&&manifest xmlns:android=&/apk/res/android&
package=&com.example.finaldemo&
android:versionCode=&1&
android:versionName=&1.0& &
android:minSdkVersion=&19& /&
&uses-permission android:name=&android.permission.READ_SMS& /&
&uses-permission android:name=&android.permission.WRITE_SMS& /&
&uses-permission android:name=&android.permission.SEND_SMS& /&
&uses-permission android:name=&android.permission.RECEIVE_SMS& /&
&uses-permission android:name=&android.permission.RECEIVE_WAP_PUSH& /&
&uses-permission android:name=&android.permission.RECEIVE_MMS& /&
&!-- &uses-permission android:name=&android.permission.SEND_SMS&/& --&
&application
android:allowBackup=&true&
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:theme=&@style/AppTheme& &
android:name=&com.example.finaldemo.MainActivity&
android:label=&@string/app_name& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
android:name=&.SmsReceiver&
android:permission=&android.permission.BROADCAST_SMS& &
&intent-filter&
&action android:name=&android.provider.Telephony.SMS_RECEIVED& /&
&/intent-filter&
&/receiver&
&service android:name=&com.example.finaldemo.SmsService& /&
&/application&&/manifest&短信拦截的代码mObserver = new ContentObserver(new Handler()) {@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);ContentResolver resolver = getContentResolver();Cursor cursor = resolver.query(Uri.parse(&content://sms/inbox&), new String[] { &_id&, &address&, &body& }, null, null, &_id desc&);long id = -1;if (cursor.getCount() & 0 && cursor.moveToFirst()) {id = cursor.getLong(0);String address = cursor.getString(1);String body = cursor.getString(2);Toast.makeText(SmsService.this, String.format(&address: %s\n body: %s&, address, body), Toast.LENGTH_SHORT).show();}cursor.close();if (id != -1) {int count = resolver.delete(Sms.CONTENT_URI, &_id=& + id, null);Toast.makeText(SmsService.this, count == 1 ? &删除成功& : &删除失败&, Toast.LENGTH_SHORT).show();}}};getContentResolver().registerContentObserver(Uri.parse(&content://sms/&), true, mObserver);个人结论 在4.4上我们可以在不成为default sms的前提下实现短信拦截,但由于App Ops从4.3出现到4.4一直牌隐藏的状态,猜想google还在不断调整中,4.4之后的子版本是否会保留,是完全不能保证的; Write SMS/MMS的权限开关的存在跟defaultsms本身是一个矛盾,之所以出现Write SMS/MMS的权限开关,完全是因为App Ops出现在前,而defaultsms出现在后所致;在4.4前,短信拦截都是通过动态注册高优先级BroadcastReceiver的方式进行拦截的,主要是用于跟竞品进行短信抢占。而现在ContenetObserver是并行通知的情况下,如果过滤逻辑不够快,依然有可能会被竞品抢先把短信先删除掉,导致拿到的最后一次短信是旧的短信。建议结合BroadcastReceiver和ContenetObserver进行拦截,BroadcastReceiver做内容校正和后备数据,以防拿到的最后一条短信是旧的时候,依然可以进行正常的拦截流程;&&&
阅读:19739 | 评论:0 | 标签:无
想收藏或者和大家分享这篇好文章→
?微信扫一扫,快速掌握黑客技术?&>&&>&&>&&>&Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例
Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例
上传大小:5.92MB
Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例!
综合评分:4(1位用户评分)
所需积分:0
下载次数:87
审核通过送C币
创建者:dickyqie
创建者:qq_
创建者:t6546545
课程推荐相关知识库
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例
会员到期时间:剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:}

我要回帖

更多关于 android5.0拦截home键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信