码迷,mamicode.com
首页 > 移动开发 > 详细

Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务

时间:2014-12-12 16:42:33      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:开机自启动服务   android 4.0及以上版本接收开机   开机启动广播   

          情景概要:自己做的一个项目的时候,或得不到开启启动的通知,这样更别说开机启动通知里面实现开机服务功能了,查找了N多资料,说法不一,太多的人说4.0之后无法获得开机通知,通过各种渠道,各种大牛的方式仍然是那些N多人说不可行的方法,即使大牛给的是英文文档也是说这样可以的。

       最后发现,开启启动通知已经实现了,但是自己的疏忽没有发现,我通过在通知里面弹出一个Toast,但是真机或者模拟器在开机的时候都需要很多启动项,导致最后的Toast弹出很晚,而自己却没看见。你可以在通知里面弹出10个以上的Toast,测试一下,发现通知确实启动了,只是时间慢了些。有人说不同的机型下还是得不到开机启动通知,我还了三款手机测试,均通过。


下面是转载的一篇测试版,大家可以简单测试。

    几个月来看到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)你的应用程序在安装后必须运行一次;2)你的应用程序没有被强行停止




那么如果要实现开机自启动服务,该怎么实现?直接上源码

1、BootCompletedReceiver.java文件

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));  
    }  
}  


配置文件中:

<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及以上版本接收开机   开机启动广播   

原文地址:http://blog.csdn.net/itjavawfc/article/details/41895039

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!