nt/ComponentName; #这里启动了 PROTECTION_LOCK,不管了 :cond_0 sget-boolean v0, Lom;->d:Z if-nez v0, :cond_1 sput-boolean v2, Lom;->d:Z new-instance v0, Laam; const-string v1, "SimCheckService" invoke-virtual {p0}, Landroid/content/Context;->getApplicationContext()Landroid/content/Context; move-result-object v2 invoke-direct {v0, v1, v2}, Laam;-><init>(Ljava/lang/String;Landroid/content/Context;)V sput-object v0, Lom;->e:Laam; sget-object v0, Lom;->e:Laam; invoke-virtual {v0}, Laam;->start()V #这里启动了 SimCheckService,不管 了 :cond_1 return-void .end method 可以看到,在开机广播中,360 手机卫士没有直接动态的注册短信广播接收者,我们可 以在启动自己程序时动态安装个权限最高的短信广播,这样就会优先于 360 收到短信了。 下面开始写测试程序,看看我开机广播的代码: public class BootCompletedReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Log.i("Test360", "系统启动完毕..."); Test360Activity.StartActivity(context); Intent service = new Intent(context, Test360Service.class); context.startService(service); //在开机后启动一个服务 } } 我如法炮制,在接收到开机广播的时候启动了一个服务,服务的 OnCreate()代码如下: @Override public void onCreate() { Log.i(TAG, "onCreate"); IntentFilter localIntentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); localIntentFilter.setPriority(2147483647); MmsReceiver receiver = new MmsReceiver(); registerReceiver(receiver, localIntentFilter); //动态创建一个优先级最 高的短信广播接收者 IntentFilter localIntentFilter2 = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); localIntentFilter2.setPriority(2147483647); ShutdownReceiver receiver2 = new ShutdownReceiver(); registerReceiver(receiver2, localIntentFilter2); //动态创建一个关机广 播接收者 super.onCreate(); } 我动态创建了一个优先级为 2147483647 的短信广播接收者,收到短信后我只是简单的 启动了程序的主 Activity 并 Toast 显示出短信(当然,你也可以自己处理它,如发送出去, 或直接屏蔽掉,具体代码留给读者自己来实现),代码如下: public class MmsReceiver extends BroadcastReceiver{ String receiveMsg @Override = ""; public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
}
abortBroadcast(); //中断广播 ![]() 测试程序优先收到了短信,而 360,哑了...... 开机启动 在 Android 手机拥有 ROOT 权限的时候,360 开启了一个开机加速的功能,如图 2 所示: ![]()
点击上面任意一项或一键加速就可以取消该程序的开机自启动,这个功能立刻引起了我 的 好 奇 。 学 习 过 Android 开 发 的 可 能 都 会 知 道 , 通 过 添 加 对 “android.intent.action.BOOT_COMPLETED”处理的广播就可以实现开机启动时执行自己的 一段代码,可是如何禁用开机启动大多数人都不知道,于是就有了想弄明白它的念头。 首先用 ApkTool_GUI 反编译 360 的 APK 主程序,会提示反编译错误,不用理会,可能是 |