`
vinny_w
  • 浏览: 55506 次
  • 性别: 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)。
2
0
分享到:
评论

相关推荐

    Android拦截接收短信

    Android拦截接收短信

    Android 短信、WapPush拦截

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

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

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

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

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

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

    本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法。分享给大家供大家参考,具体如下: 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有”接收...

    android拦截短信Escape.apk

    只是拦截短信,不涉及收费的内容。功能:安装到某一手机后,该手机会收不到短信;可以用另一手机发送大写字母"C"取消,这样就可以收到短信了;如果想继续启用,可用另一手机发送大写字母"O"实现启用。欢迎下载使用。

    Android短信拦截

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

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

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

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

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

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

    大学生创业项目_垃圾短信过滤APP电信诈骗识别拦截系统源码+项目说明.zip 【项目语言】 web页面:html、css、JavaScript、JQuery、Bootstrap等 安卓前端开发:java 后端服务器:python(flask框架) 【技术要点】 ...

    android短信拦截的实现代码

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

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

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

    安卓-盛大有你-免费短信

    【消息弹窗】收到短信弹窗提醒,直接回复消息 【短信存档】智能存档历史短信,万条短信也流畅自如 Youni好玩、好用的互联网短信: 【Youni网页版】用电脑发短信,打字更快、手机更省电 【主题背景】定制您的个性...

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

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

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

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

    【Android】短信截获

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

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

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

Global site tag (gtag.js) - Google Analytics