Android学习笔记---接收系统开机广播实现自启动

一、前因


今天接到一个需求,就是让程序在设备开机的时候就自己启动,听起来虽然流氓,但是在TV端却是在正常不过的了,刚接到需求的时候心想这simple

二、过程


首先一个实现原理:Android系统中许多操作都会发生很多广播,比如打电话,接收短信,已经开机,充电 等等,我们今天要监听的就是开机广播,开机自启动,一听名字就知道和开机有关,没错,所谓的开机自启动就是监听开机广播之后做出相应的操作,我们先来新建一个广播文件

/**
 * 接收开机自启广播
 * Created by Administrator on 2017/9/4.
 */

public class BootCompletedReceiver extends BroadcastReceiver {
    private final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
    @Override
    public void onReceive(Context context, Intent intent) {
        if(ACTION_BOOT.equals(intent.getAction())){
            // TODO Auto-generated method stub
            //构建Intent
            Intent ootStarIntent = new Intent(context,MainActivity.class);
            //跳转不加这个会报错
            ootStarIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//
            context.startActivity(ootStarIntent);
        }
    }
}

新建的广播里面写你要做的事情,做完这一步我们还需要做什么,没错,就是注册,只有注册了广播才会生效,没有注册的广播不叫广播,叫文件

一般广播的注册方式分为两种

1 :全局注册 全局注册是在项目中的AndroidManifest.xml文件里面注册,一次注册,终身无忧,不管是谁发的 都能收到,安全系数较低

2:局部注册 局部注册为在代码中注册,广播有效性只在本应用中有效,安全系数比较高


此次我们使用的是全局注册方式,毕竟开机广播是系统发的,只有这样你才能接收到


android:name=".broadcast.BootCompletedReceiver">
    
        android:name="android.intent.action.BOOT_COMPLETED" />
    

最后在加上接收广播的权限


android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
android:name="android.permission.RESTART_PACKAGES" />

好了,做完这些操作正常情况下你就可以接收到开机广播了,然后为所欲为,可是 偏偏我就遇到了不正常的情况,广播并没有接收到

具体是什么原因呢?请教了各位大佬以及百度终于找到了解决方案

三、解决方案


原来有的系统只加一个intent-filter是不行的 


android:name=".broadcast.BootCompletedReceiver">
    
        android:name="android.intent.action.BOOT_COMPLETED" />
        android:name="android.intent.category.HOME" />
    
    
        android:name="android.intent.action.PACKAGE_ADDED" />
        android:name="android.intent.action.PACKAGE_REMOVED" />
        android:name="android.intent.action.PACKAGE_REPLACED" />
        android:scheme="package" />
    


在之前注册的广播中加上这些,接收不到开机广播的问题完美解决啦

你可能感兴趣的:(Anndroid学习笔记)