最近在做一个测试程序的时候想到了这个问题,但是由于实验条件有限,没时间做这个测试。希望知道答案的大牛解答一下。
假设一个应用自从安装在手机上以后**从来没有运行过**(包括安装完毕也没点击运行)
1.此应用**能否接受**网络变更(android.net.conn.CONNECTIVITY_CHANGE)等类似的广播?自定义广播?
2.假如手机重启,此应用**能否接受**开机自启动广播?(android.intent.action.BOOT_COMPLETED)
补充:拥有开机启动权限
Android的广播有两种注册方式。如果是在程序代码中动态注册的广播,程序没有运行就不会接收到相应的广播。如果注册在AndroidManifest.xml中,这种广播属于全局广播,程序安装的时候就注册到了系统上面,就算程序没有运行过也可以接收到相应的广播。
直接安装调频软件最省事
做了几年的开发,今天突然看到这个问题,给自己做一个总结。
对于原生android系统,应用在安装后即可接收到在AndroidManifest.xml中配置的静态广播,如果是动态广播,只有程序运行并注册广播后才会收到。
但在中国很少有设备是搭载原生系统的,目前比较好做实验的是电视盒子。
对于定制系统,例如miui、华为的系统等,会在底层拦截大部分唤醒广播,达到省电目的,因此网上常见的自启动方式均难以生效。
由此产生了两个分支的黑科技,组广播和防杀死。
组广播是利用将用户常用的软件唤醒其他软件,例如阿里的组广播会唤醒阿里系的各种app的后台功能,包括支付宝、淘宝、知乎等等。
组广播系统难以判断是否拦截,因为会存在用户使用的场景,例如从微信打开浏览器,或微信调用了qq的某些功能。
但对于小型开发者来说,组广播不太现实,因为需要加入响应的广播联盟,因此也有一些公司提供这方面的api可以接入,例如友盟。
防杀死相对组广播来说更加黑科技,其简单原理是在app启动后,开启两个service,互相监视,若有一个被杀死,另一个帮它复活。
并由此产生各种链式结构、网状结构来拒绝系统的清理。