`
qinya06
  • 浏览: 581531 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android 拦截 接收 短信

 
阅读更多
(1) 这个例子没有Activity,类SmsReceiver继承于BroadcastReceiver
public class SmsReceiver extends BroadcastReceiver { 
	   
	   @Override
	    public void onReceive(Context context, Intent intent) {
	        // 判断是系统短信;
	        if (intent.getAction()
	                .equals("android.provider.Telephony.SMS_RECEIVED")) {
	            // 不再往下传播;
	            this.abortBroadcast();
	            StringBuffer sb = new StringBuffer();
	            String sender = null;
	            String content = null;
	            String sendtime = null;
	            Bundle bundle = intent.getExtras();
	            if (bundle != null) {
	                // 通过pdus获得接收到的所有短信消息,获取短信内容;
	                Object[] pdus = (Object[]) bundle.get("pdus");
	                // 构建短信对象数组;
	                SmsMessage[] mges = new SmsMessage[pdus.length];
	                for (int i = 0; i < pdus.length; i++) {
	                    // 获取单条短信内容,以pdu格式存,并生成短信对象;
	                    mges[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
	                }
	                for (SmsMessage mge : mges) {
	                    sb.append("短信来自:" + mge.getDisplayOriginatingAddress()
	                            + "\n");
	                    sb.append("短信内容:" + mge.getMessageBody());
	 
	                    sender = mge.getDisplayOriginatingAddress();// 获取短信的发送者
	                    content = mge.getMessageBody();// 获取短信的内容
	                    Date date = new Date(mge.getTimestampMillis());
	                    SimpleDateFormat format = new SimpleDateFormat(
	                            "yyyy-MM-dd HH:mm:ss");
	                    sendtime = format.format(date);// 获取短信发送时间;
	                    // SmsManager manager = SmsManager.getDefault();
	                    // manager.sendTextMessage("5556",
	                    // null,"发送人:"+sender+"-----发送时间:"+sendtime+"----内容:"+content,
	                    // null, null);//把拦截到的短信发送到指定的手机,此处为5556;
	                    // if ("5556".equals(sender)){
	                    // //屏蔽手机号为5556的短信,这里还可以时行一些处理,如把该信息发送到第三人的手机等等。
	                    // abortBroadcast();
	                    // }
	                }
	                Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG)
	                        .show();        } 
	           
	           
	    } 
	       
	}


代码中:this.abortBroadcast(); 让广播机制不再传播下去。

在AndroidManifest.xml中配置的代码如下:
<receiver android:name=".SmsReceiver"> 
	          <intent-filter android:priority="800"> 
	              <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 	          </intent-filter> 
	      </receiver>


广播有两种不同的类型:普通广播(Normal Broadcasts)和有序广播(Ordered Broadcasts)。普通广播是完全异步的,可以被所有的接收者接收到,并且接收者无法终止广播的传播,而有序广播是按照接收者声明的优先级别,被接收者依次接收到,注意:优先级相同,则根据包名依次传递广播。
    由于短信广播是一种有序广播,该有序广播会先发送给优先级最高的那个Receiver,而代码中SmsReceiver中的优先级为 800:<intent-filter android:priority="800">。(优先级的大小范围为 -1000 到 1000)这个优先级比收到短信的那个软件优先级高。所以SmsReceiver接收到了短信并不再往下传了,起到了拦截短信的作用。

还有,接收短信需要权限,在AndroidManifest.xml中配置:

<uses-permission android:name="android.permission.RECEIVE_SMS"/>



若想删除收件箱中已存在的短信,请参考Android源码SmsProvider类,可以在你的应用中使用ContentProvider机制进行操作。

Context.sendBroadcast():发送的是普通广播,所有订阅者都有机会获得并进行处理。

Context.sendOrderedBroadcast():发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者。

系统发送android.provider.Telephony.SMS_RECEIVED广播是有序广播(参见源码:SMSDispatcher.java)
分享到:
评论

相关推荐

    Android拦截接收短信

    Android拦截接收短信

    Android 短信、WapPush拦截

    进行过研究,也拦截成功了。 但是针对不同的手机厂家的android系统(略有不同),有的拦截就不成功了。 一般情况下,使用较标准的Google的android系统,拦截比较...会出现短信进入收件箱,才删除,或者根本拦截不成功。

    Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例

    Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例!

    Android编程实现拦截短信并屏蔽系统Notification的方法

    1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有”接收”SMS的权限 &lt;uses android:name=android.permission.RECEIVE_SMS&gt; &lt;uses android:name=android.permission.RECEIVE_SMS&gt; 3.

    Android 攻破360手机卫士的短信拦截开机启动等服务.rar

    里面涉及到执行Root命令、获取Android开机启动列表、启用主Activity,开启开机自动运行、禁用360进程与服务、动态创建一个优先级最高的短信广播接收者、动态创建一个关机广播接收者。以下分别说明三者的实现:  短信...

    Android项目实现短信的发送、接收和对短信进行拦截

    本篇文章主要介绍了Android项目实现短信的发送、接收和对短信进行拦截,这是学习Android比较入门的东西,有需要的可以了解一下。

    Android上的文本数据短信(发送接受拦截)

    android短信操作,实现发送,接收与拦截

    Android短信拦截

    创建SMSReseiver继承BroadcastReceiver对短信接收进行监听,当手机接收到短信时,将发件人号码与指定的手机号进行比较,如果相同,则将短信广播中断并将短信内容存储在sd卡根目录下的sms.txt文件中;否则,不做任何...

    Android例子源码指定号码短信拦截

    2.3.7MIUI系统测试可以正常拦截,不过因为系统问题会尝试接收短信的提示,可以按HOME保持后台运行。代码较少,可以作为独立模块用在一些手机安全项目中,请勿用于非法用途。其他版本没有测试。编译版本2.3.3 编码GBK

    android短信拦截的实现代码

    短信拦截的实现主要是使用了广播接收者来实现。 BroadcastReceiver 广播接收者 必须指定要接收的广播类型。必须明确的指定action 广播:事件。普通广播: 是异步的。会广播接收者同时接收,不能被中断...

    Android项目源码短信定位手机找人应用.zip

    本项目是一个基于安卓的手机远程找人项目源码,在给手机发送“定位”俩字的短信后...本项目只能定位,并不会有效拦截短信,所以做马的别想了。只能用来找人。注意:本项目是android studio项目 eclipse可能无法直接导入

    Android项目源码短信定位手机找人应用

    本项目是一个基于安卓的手机远程找人项目源码,在给手机发送“定位”俩字的短信后...本项目只能定位,并不会有效拦截短信,所以做马的别想了。只能用来找人。注意:本项目是android studio项目 eclipse可能无法直接导入

    大学生创业项目-垃圾短信过滤APP电信诈骗识别拦截系统源码+项目说明.zip

    后端(Python Flask)接收短信数据,进行垃圾短信筛选,返回Json数据给前端: 后端使用scikit-learn模块(数据挖掘和数据分析工具),通过其朴素贝叶斯算法API对短信数据进行垃圾短信的识别: 导入中文垃圾短信数据...

    【Android】短信截获

    【Android】短信应用——短信截获 Demo 相关文章链接:http://blog.csdn.net/etzmico/article/details/7317892

    安卓手机无法正常收发短信的检查工具

    短信是用户广泛使用的一项业务,用户在使用短信业务时候碰到的无法接收短信的情况是一种常见的问题。核查的问题包括手机的短信收件箱是否溢出或者机身内存不足、手机短信中心号码是否正确、是否有安全软件拦截等。

    手机防盗器android源码

    4、接收短信拦截短信通知 涉及技术: TelephonyManager Receiver Intent Service Activity LocationManager SmsManager provete GPS location SharedPreferences 打算完成功能因时间原因未做的,希有兴趣者完成 设置...

    Android实现自动填充短信验证码

    利用广播接收器来拦截短信获取其中匹配的内容,提供回掉,将短信内容暴露到activity中实现自动填充 首先我们要实现一个广播接收器 package com.wquant.weilt.reciver; import java.util.regex.Matcher; import java...

    短信彩信的收发

    本资源实现了android系统中短信的拦截和显示、彩信的拦截及保存 短信的发送功能,将所有的拦截的彩信数据都存储在自己建立的数据库中。

Global site tag (gtag.js) - Google Analytics