zoukankan      html  css  js  c++  java
  • Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务

    几个月来看到CSDN上看到很多朋友发帖询问开机自动启服务的问题,也就是BOOT_COMPLETED广播的问题,有的人说开机能收到广播,有的人又说开机收不到广播,这里本人亲自试验并总结分享给大家!

       原来,在3.1之后,系统的PackageManager增加了对处于“stopped state”应用的管理,这个stopped和Activity生命周期中的stop状态是完全两码事,包管理器中的stopped state指的是安装后从来没有启动过或者是被用户手动强制停止的应用。这点大家可以到“设置”——>"应用程序",查看任何一个安装的应用,看看“强行停止”这个按钮是否变灰就知道了。

       系统增加了2个Flag:FLAG_INCLUDE_STOPPED_PACKAGESFLAG_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在CODE上查看代码片派生到我的代码片
    1. public class BootCompletedReceiver extends BroadcastReceiver {  
    2.   
    3.     @Override  
    4.     public void onReceive(Context context, Intent intent) {  
    5.         // TODO Auto-generated method stub  
    6.         Log.d("LibraryTestActivity""recevie boot completed ... ");  
    7.         context.startService(new Intent(context, TestService.class));  
    8.     }  
    9. }  

    2、AndroidManifest.xml文件

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    1. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  
    2.   
    3. <receiver android:name=".BootCompletedReceiver">  
    4.     <intent-filter>    
    5.         <action android:name="android.intent.action.BOOT_COMPLETED" />    
    6.     </intent-filter>  
    7. </receiver>  

    注意,一定要加上权限<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    否则就收不到广播咯。


    3、安装应用到你的手机后,启动一次该应用,那么下次开机就能收到BOOT_COMPLETED广播,并且就能看到TestService服务启动了。


    做了个测试:到设置——>应用程序,找到刚才安装的应用,点击“强行停止”,那么重启手机后,就收不到BOOT_COMPLETED广播了。

    如果该应用被有些三方安全软件强制杀掉进程后,重启手机也会收不到BOOT_COMPLETED广播。





  • 相关阅读:
    java String 转Json报错 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim
    Idea 进行断点调试的 快捷键
    spring AOP的使用步骤
    AOP的定义和原理
    SpringBoot入门篇--使用IDEA创建一个SpringBoot项目
    详解CI、CD相关概念
    intellij idea 的全局搜索快捷键方法
    面向对象之工厂模式与构造函数模式的区别
    冒泡排序和快速排序
    java里的数组和list分别在什么情况下使用?
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744507.html
Copyright © 2011-2022 走看看