Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
2014-09-01 10:41
633 查看
Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
2014-09-01 10:416368人阅读评论(0)
收藏
举报
本文章已收录于:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/b367fdce88ee208da19a58e7fab01f44.jpg)
分类:
Android(24)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/b16356edc9d65f9de5798055c2b20c3c.jpg)
![](http://static.blog.csdn.net/images/arrow_triangle_up.jpg)
作者同类文章X
几个月来看到CSDN上看到很多朋友发帖询问开机自动启服务的问题,也就是BOOT_COMPLETED广播的问题,有的人说开机能收到广播,有的人又说开机收不到广播,这里本人亲自试验并总结分享给大家!
原来,在3.1之后,系统的PackageManager增加了对处于“stopped state”应用的管理,这个stopped和Activity生命周期中的stop状态是完全两码事,包管理器中的stopped state指的是安装后从来没有启动过或者是被用户手动强制停止的应用。这点大家可以到“设置”——>"应用程序",查看任何一个安装的应用,看看“强行停止”这个按钮是否变灰就知道了。
系统增加了2个Flag:FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES
,来标识一个intent是否激活处于“stopped state”的应用。当2个Flag都不设置或者都进行设置的时候,采用的是FLAG_INCLUDE_STOPPED_PACKAGES的效果。有了上面的新机制之后,google觉得给所有的广播intent默认加上FLAG_EXCLUDE_STOPPED_PACKAGES会非常的Cooooool,能在一定程度上避免流氓软件、病毒啊干坏事,还能提高效率,就导致了RECEIVE_BOOT_COMPLETED广播如果用户没有运行过应用或者在设置中强行停止了应用,就不会接收到BOOT_COMPLETED广播。
那么如果要实现开机自启动服务,该怎么实现?直接上源码
1、BootCompletedReceiver.java文件
[java]
view plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
public
class BootCompletedReceiver
extends BroadcastReceiver
{
@Override
public
void onReceive(Context
context, Intent intent) {
// TODO Auto-generated method stub
Log.d("LibraryTestActivity",
"recevie boot completed ... ");
context.startService(new
Intent(context, TestService.class));
}
}
2、AndroidManifest.xml文件
[html]
view plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
<uses-permission
android:name="android.permission.RECEIVE_BOOT_COMPLETED"
/>
<receiver
android:name=".BootCompletedReceiver">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED"
/>
</intent-filter>
</receiver>
注意,一定要加上权限<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
否则就收不到广播咯。
3、安装应用到你的手机后,启动一次该应用,那么下次开机就能收到BOOT_COMPLETED广播,并且就能看到TestService服务启动了。
做了个测试:到设置——>应用程序,找到刚才安装的应用,点击“强行停止”,那么重启手机后,就收不到BOOT_COMPLETED广播了。
如果该应用被有些三方安全软件强制杀掉进程后,重启手机也会收不到BOOT_COMPLETED广播。
相关文章推荐
- Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
- Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
- Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
- Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
- Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
- Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
- Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
- Android 4.0 开机启动后接受不到android.permission.RECEIVE_BOOT_COMPLETED 广播
- Android4.2中应用接收开机广播(android.intent.action.BOOT_COMPLETED)失败的原因
- android 开机启动广播 BOOT_COMPLETED
- android之4.0开机自接受广播,启动服务的问题
- Android 开机广播BOOT_COMPLETED延迟接收问题解决
- Android4.2中应用接收开机广播(android.intent.action.BOOT_COMPLETED)失败的原因
- 高版本android 开机广播boot_completed
- Android4.2中应用接收开机广播(android.intent.action.BOOT_COMPLETED)失败的原因
- Android应用接收开机广播(android.intent.action.BOOT_COMPLETED)失败的原因
- Android 接收开机广播,启动程序或者Service
- Android4: ACTION_BOOT_COMPLETED开机启动程序需要声明权限
- Android 开机自动启动Service 解决无法Service无法接收BOOT_COMPLETED广播
- Android开机自启动后台服务-RECEIVE_BOOT_COMPLETED