android短信拦截优先级

    前几天刚写了一个短信拦截程序,该程序放在虚拟机或是原生态的android中测试是可以拦截到短信的,但是在真机中却始终拦截不了。

    查了下原因,主要是真机中系统有其特有的短信拦截程序,要让自己的程序优先与系统程序拦截短信,这就要让自己的程序优先级设置为最高。

    网上很多地方说只需要把android:priority设置为1000就是最高优先级,其实不然,android:priority的最大值不是1000,而是Integer的最大值即2147483647,所以注册的接收器应该为:

<receiver android:name="com.android.ars.GetInfoReceiver">
            
            <intent-filter android:priority="2147483647">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
</receiver>

    然而动态注册的优先级和静态注册的优先级相比呢?

    答案是动态注册的优先级会比静态注册的优先级高,应该说动态注册的优先级会永远比静态注册的优先级高。

    所以,短信接收器还得动态注册下。在动态注册优先级同等条件下,先动态注册的优先级高。为了让程序的优先级最高,可让程序设置为开机启动,然后在开机启动的服务中注册短信接收器,即在开机服务的onCreate方法中注册。

public void onCreate(){
		super.onCreate();
		IntentFilter intent = new IntentFilter();
		intent.addAction("android.provider.Telephony.SMS_RECEIVED");
		intent.setPriority(2147483647);
		this.registerReceiver(new GetInfoReceiver(), intent);
	}


    在开机启动的过程中,注册广播也有先后顺序,这与程序的包名有关,具体可见—— android 抢先开机启动程序

    如果完成以上操作,这样只能让程序优先于第三方软件,不能优先于系统拦截短信软件,如果为了自己的程序优先于系统拦截短信,可将自己的程序改为系统程序。

发布了3 篇原创文章 · 获赞 1 · 访问量 1775

猜你喜欢

转载自blog.csdn.net/zhoufei3813/article/details/8595228