2 enight0000 enight0000 于 2014.08.24 17:41 提问

安卓程序在什么条件下可以接受广播?

最近在做一个测试程序的时候想到了这个问题,但是由于实验条件有限,没时间做这个测试。希望知道答案的大牛解答一下。
假设一个应用自从安装在手机上以后**从来没有运行过**(包括安装完毕也没点击运行)
1.此应用**能否接受**网络变更(android.net.conn.CONNECTIVITY_CHANGE)等类似的广播?自定义广播?
2.假如手机重启,此应用**能否接受**开机自启动广播?(android.intent.action.BOOT_COMPLETED)
补充:拥有开机启动权限

3个回答

qinxiandiqi
qinxiandiqi   2014.08.24 22:43

Android的广播有两种注册方式。如果是在程序代码中动态注册的广播,程序没有运行就不会接收到相应的广播。如果注册在AndroidManifest.xml中,这种广播属于全局广播,程序安装的时候就注册到了系统上面,就算程序没有运行过也可以接收到相应的广播。

qinxiandiqi
qinxiandiqi Sorry,我以前使用开机广播的时候,那个时候主流系统版本还是Android 2.3,好像Android3.1之后Android广播机制有修改。这篇博文写的很详细,你可以参考一下:http://blog.csdn.net/whu_zhangmin/article/details/18654031
3 年多之前 回复
enight0000
enight0000 在我测试的时候没有收到广播消息,但是运行之后就可以接受了。这是什么原因?
3 年多之前 回复
dsmjy
dsmjy   2014.08.25 12:44

直接安装调频软件最省事

enight0000
enight0000 不懂,具体点
3 年多之前 回复
enight0000
enight0000   2017.12.20 22:34

做了几年的开发,今天突然看到这个问题,给自己做一个总结。
对于原生android系统,应用在安装后即可接收到在AndroidManifest.xml中配置的静态广播,如果是动态广播,只有程序运行并注册广播后才会收到。
但在中国很少有设备是搭载原生系统的,目前比较好做实验的是电视盒子。
对于定制系统,例如miui、华为的系统等,会在底层拦截大部分唤醒广播,达到省电目的,因此网上常见的自启动方式均难以生效。
由此产生了两个分支的黑科技,组广播和防杀死。
组广播是利用将用户常用的软件唤醒其他软件,例如阿里的组广播会唤醒阿里系的各种app的后台功能,包括支付宝、淘宝、知乎等等。
组广播系统难以判断是否拦截,因为会存在用户使用的场景,例如从微信打开浏览器,或微信调用了qq的某些功能。
但对于小型开发者来说,组广播不太现实,因为需要加入响应的广播联盟,因此也有一些公司提供这方面的api可以接入,例如友盟。

防杀死相对组广播来说更加黑科技,其简单原理是在app启动后,开启两个service,互相监视,若有一个被杀死,另一个帮它复活。
并由此产生各种链式结构、网状结构来拒绝系统的清理。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!