文档章节

Android中短信拦截解决方案

塔塔米
 塔塔米
发布于 2014/02/16 00:37
字数 571
阅读 99
收藏 0
Android中短信拦截解决方案 
经过测试,Android中是可以拦截短信的,解决方案如下: 
package com.tigertian.sms; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 

public class SMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
        // TODO Auto-generated method stub 
        System.out.println("SMSReceiver, isOrderedBroadcast()=" 
                + isOrderedBroadcast()); 
         
        Bundle bundle = intent.getExtras(); 
        Object messages[] = (Object[]) bundle.get("pdus"); 
        SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
        for (int n = 0; n < messages.length; n++) { 
            smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
            if(smsMessage[n].getMessageBody().contains("hahaha")){ 
                this.abortBroadcast(); 
            } 
            System.out.println(smsMessage[n].getOriginatingAddress()+" "+smsMessage[n].getMessageBody()+" "+smsMessage[n].getIndexOnIcc());
        } 
    }} 
   <receiver android:name=".SMSReceiver"> 
            <intent-filter android:priority="10000"> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
                <category android:name="android.intent.category.DEFAULT" /> 
            </intent-filter> 
        </receiver> 
上面的代码是一个消息监听,监听接收短信的消息。我们可以从控制台打印信息里面看到,他是一个OrderedBroadcast,根据这一点我们就可以对短信机制进行拦截。如何拦截呢?首先要声明一个消息监听器,同时根据上面的配置文件需要在AndroidManifest.xml中配置好,注意它的优先级是10000,这一点很关键,因为OrderedBroadcast是根据优先级来传递消息的,优先级越高越先获取到消息,待处理完后才会传递给下一个监听器,如果当前监听器退出广播,那么后面的所有监听器都将无法收到消息。其次我们需要实现onReceive方法,根据上面的代码,我们可以从bundle中拿到短信内容并还原成SmsMessage,这样我们可以根据特定条件来判断哪些是需要我们拦截并且不要让用户知道的,哪些是我们可以放行的。需要我们拦截的短信,我们可以在收到后直接abortBroadcast()(上面的代码中是判断当短信内容包含hahaha的时候直接拦截),这样系统收件箱将无法接收到该条短信,继而也就不会有notification去通知用户。至此,应用编写好之后,短信拦截功能就完成了,当然基于此还可以做一些其他功能,这方面就看需求了。注意,优先级相同,则根据包名依次传递广播。想删除收件箱中已存在的短信,请参考Android源码SmsProvider类,可以在你的应用中使用ContentProvider机制进行操作。 

本文转载自:http://www.boyunjian.com/do/article/snapshot.do?uid=net.csdn.blog%2Fanskya520%2Farticle%2Fdetails...

共有 人打赏支持
塔塔米
粉丝 11
博文 660
码字总数 17397
作品 0
朝阳
程序员
私信 提问
2014 年 Android 恶意代码发展报告

AVL移动安全团队统计2014年移动恶意代码数据时发现:本年度Android恶意代码总量已增至123万。从历年恶意代码总量的发展趋势来看,2014年Android恶意代码总量的增长幅度没有延续去年猛增的势头...

oschina
2015/04/10
3.1K
17
Android push (一):SMS push

Android push (一):SMS push 移动终端为了节省电量和网络流量,不再采用轮训服务器的方式来收集数据,而是在服务器有数据需要发送到终端时通知终端。我们称这种机制叫推送(push)。终端接...

LiSteven
2013/06/04
0
1
Android6.0 源码修改之屏蔽系统短信功能和来电功能

一、屏蔽系统短信功能 1、屏蔽所有短信 android 4.2 短信发送流程分析可参考这篇 戳这 源码位置 vendormediatekproprietarypackagesappsMmssrccomandroidmmstransactionSmsReceiverService....

cczheng
2018/10/10
0
0
Android新姿势:如何截取短信

公司要做一个【因为是机密所以不能说】的项目,有个需求是拦截手机系统的短信,而且不能在手机的短信应用上显示。 OK,一开始以为不难,网上查了一下资料也发现有人做过,于是就开始写demo,...

linin630
2014/11/18
0
5
2016 黑客的 Android 工具箱都有哪些?

免责声明:此份清单仅供学习之用。知悉黑客软件能做到哪些。我们不支持读者利用其中的任何工具进行任何不道德的恶意攻击行为。 根据业界的一系列评测以及亲身经验,我们整理出了这份最佳And...

oschina
2016/02/22
14.8K
29

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
7
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部