`
ipjmc
  • 浏览: 707496 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

短信拦截

阅读更多
        最近写一个应用(A),需要拦截短信分析。一般是这样实现的:注册一个接受短信Intent-Filter,获取短信广播,分析短信内容然后相应处理。对特定短信终止广播继续(abort方法),阻止其进入收件箱。大致就是这么一个过程。

但上述方式,在QQ通讯录/360/飞信存在的情况下,拦截短信失败~也就是说它们抢先拿到了收短信的广播,并将其中断了。那么如何解决这个问题呢~

本来以为腾讯是拦截ril层的消息,然后阻止广播继续,但是这种方式要修改framework才能实现。

后来发现存在广播接收器(Receiver)的Intent-Filter的优先级(priority),SDK里说Prioruty的范围是-1000~1000,若设为一千以上好像跟1000的效果一样。然后我在A应用中的Manifest里将Receiver的Intent-Filter优先级设为1000,但测试结果还是被QQ通讯录抢先。

        进一步Google后,得到下面的结论:
反编译QQ通讯录/360手机卫士,发现些许奥秘。貌似这个涉及到Broadcast的分发机制,参考底层代码应该比较好解释~
广播分为2中,无序和有序。可以理解为散列和队列。

首先无序广播,不能中断,所有注册相应Intent-Filter的Reciver都可以接收到~

其次是有序广播,可以中断。它的消息是按优先级传送的,任何一个Receiver在接收后,可以使用abort将其停止,这样就导致了后续的Receiver不能收到广播。

        下面是一个猜想,做了些测试,也基本符合~

假设广播接收器的优先级都设为最大整型2147483647,首先动态注册优先级最高,其次是静态注册。在动态注册中,最早注册的优先级最高。在静态注册中,最早安装的程序,优先级最高(注:安装apk会解析af.xml,把其加入队列)

在反编译360后,发现其静态注册的广播接收器里设置的优先级数值为2147483647,然后再广播中启动一个service,在service中注册一个优先级为2147483647的同样地广播接收器。也就是说,假设现在进程全杀,那么短信来了,360和QQ通讯录,谁先安装,谁的静态注册广播接收器就会先启动,然后把广播中断,而且它还启动了一个service又动态注册一个Receiver。这样,它的优先级就排在了所有静态接收器之前了。

        所以,我们做个试验,以同样的方式:
首先写一个应用,注册一个开机完成的Receiver


<receiver android:name=".MyBrocast" android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="2147483647">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
            <intent-filter android:priority="2147483647">
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
</receiver>


然后再这个Receiver接收到开机广播后,立即启动一个service
public void onReceive(Context context, Intent intent) {
                Log.v("MyBrocast.onReceive", "testtttttttttttt");
                if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
                        Intent service=new Intent(context, MyService.class);
                        context.startService(service);
                }
}


然后在service中重新动态注册一个Receiver,优先级为2147483647
IntentFilter localIntentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
localIntentFilter.setPriority(2147483647);
MyBrocast localMessageReceiver =new MyBrocast();
Log.v("MyBrocast.onReceive", "onCreate");
Intent localIntent = registerReceiver(localMessageReceiver,localIntentFilter);


重启手机就OK了,抢先360、QQ拦截短信~因为360/QQ并没有在接受开机广播后,动态注册短信广播的接收器。这样重启后A应用就可以在它们之前拦截到短信了~

但上述抢先方式,付出的代价是,A应用需要一直有这么一个service后台运行。一旦被杀,优先权又回被360/QQ抢占,只有等到下次重启。除非A应用在QQ/360之前安装到手机上~

        总结一下:
具体的顺~ 代码动态注册的Intent-Filter高于manifest静态注册的Intent-Filter。动态注册中的Intent-Filter在相同优先级下(如整型的最大值),接受顺序是按照动态注册的时间顺序。静态注册中Intent-Filter在相同优先级下,接受顺序是apk的安装顺序。

参考帖子:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=148381
分享到:
评论

相关推荐

    block_java_拦截短信_拦截_短信拦截_

    在Android系统中,实现短信拦截功能主要涉及到两个关键知识点:BroadcastReceiver(广播接收者)和ContentProvider。在Java编程环境下,我们可以通过这两种组件来监听并处理短信消息。 首先,我们需要创建一个...

    Android短信拦截源码

    在Android系统中,短信拦截是一项重要的功能,它允许开发者创建应用程序来过滤或处理特定类型的短信。这个"Android短信拦截源码"可能包含了实现这一功能的完整代码库,可以帮助我们理解如何在Android应用中实现短信...

    iOS5短信拦截小demo

    【iOS5短信拦截小demo】是一个面向iOS平台的示例项目,主要展示了如何在iOS系统中实现短信的拦截功能。这个项目可能适用于开发者或者对iOS系统底层操作感兴趣的用户,特别是那些想要了解或开发类似功能的人。 在iOS...

    Android 短信拦截器

    在Android系统中,短信拦截器是一种机制,允许开发者在短信到达设备时进行处理,比如过滤、存储或响应特定类型的短信。这个"Android 短信拦截器"可能是一个示例项目,展示了如何在Android 4.0.3(Ice Cream Sandwich)...

    短信拦截源码

    【短信拦截源码详解】 短信拦截技术在移动设备安全领域占据着重要的位置,尤其是在Android系统中,由于其开放性,开发者可以通过编写特定的代码来实现对短信的接收、处理和控制。在这里,我们主要探讨的是Android...

    中国电信垃圾短信拦截系统技术规范推荐.pdf

    《中国电信垃圾短信拦截系统技术规范推荐》是中国电信集团公司在2012年发布的一份指导性文档,旨在规范和提升其垃圾短信治理能力。本文档主要涵盖了垃圾短信拦截系统的功能需求和技术实现建议,以保障网络资源的有效...

    Android4.4+短信拦截删除

    本文将深入探讨Android 4.4+短信拦截删除的相关知识点。 首先,我们要了解的是`BroadcastReceiver`,这是Android系统中用于监听特定事件(如接收到短信)的重要组件。开发者可以创建一个自定义的`BroadcastReceiver...

    MTK功能机短信拦截方法

    "MTK功能机短信拦截方法"是指在搭载MediaTek芯片的功能手机上实现对短信的拦截和处理的一种技术手段。这个技术对于开发远程控制手机的应用尤其关键,因为它允许程序在用户不知情的情况下接收和响应特定的短信指令。 ...

    短信拦截,黑名单

    【短信拦截与黑名单功能】 在现代智能手机中,短信拦截与黑名单功能是用户管理通信、防止垃圾短信和骚扰信息的重要工具。这些功能允许用户定制规则,筛选出不希望接收的短信,提升个人信息安全和隐私保护。 1. **...

    短信 拦截 类 symbian

    在Symbian操作系统中,短信拦截功能是一种重要的安全特性,它允许用户阻止不必要的或潜在的恶意短信。"短信拦截类"通常是指一个编程类,开发者可以利用这个类来实现短信的过滤和管理。下面我们将详细探讨Symbian系统...

    短信拦截 开机自启

    【短信拦截与开机自启】 在移动设备领域,短信拦截是一项重要的安全功能,它允许用户阻止不必要的、垃圾的或者潜在有害的短信。短信拦截器通常作为手机安全应用的一部分,能够帮助用户过滤掉广告、诈骗信息甚至恶意...

    symbian 手机短信拦截源代码

    在本文中,我们将深入探讨Symbian系统的手机短信拦截源代码。Symbian是一个历史悠久的智能手机操作系统,曾经广泛应用于诺基亚等品牌手机。短信拦截功能对于用户来说非常重要,它可以帮助用户过滤垃圾短信,保护隐私...

    android中利用广播实现指定电话号码的短信的拦截 源码

    2. **短信拦截**:要实现短信拦截,我们需要创建一个BroadcastReceiver,并在它的onReceive()方法中处理接收到的短信。首先,我们需要在AndroidManifest.xml文件中注册BroadcastReceiver,并声明SMS_RECEIVED权限: ...

    SMS.rar_android_android sms_android 短信_短信拦截

    本文将深入探讨Android平台上的短信功能,特别是如何在Android应用中实现短信拦截,以及有序广播的概念。 一、Android SMS服务基础 Android系统提供了SmsManager类,它是处理短信操作的主要接口。通过这个类,...

    android短信拦截和定位

    在Android平台上,短信拦截和定位是两个不同的但相关的功能,它们在移动应用开发中具有一定的实用价值。本文将深入探讨这两个主题,以便更好地理解它们的工作原理、实现方式以及相关注意事项。 首先,我们来讨论...

    安卓短信彩信相关相关-短信拦截应用程序源码学习研究用研究用别人安装激活后拦截全部短信在别人手机不显示短信。.rar

    本文将深入探讨基于安卓平台的短信拦截应用程序的开发与实现,主要通过分析给出的源码进行学习和研究。短信拦截应用程序是一种能够控制和管理手机接收到的短信的应用,它可以阻止特定号码或所有号码的短信在用户手机...

    android 短信拦截源码

    在Android系统中,短信拦截是一项重要的功能,它允许应用程序在接收到短信时进行处理,比如阻止垃圾短信或者自动执行特定操作。本项目“android 短信拦截源码”提供了实现这一功能的代码示例,我们可以从中学到如何...

Global site tag (gtag.js) - Google Analytics