天天看点

Android 开机启动广播

前言

Android应用开发过程中可能会有需要在移动设备开机之后做一些应用相关的操作。比如杀毒软件,应用推送等。

使用

Android系统默认在开机之后会发送一个全局的系统广播,我们可以在这个广播之上做些文章。

  • 自定义广播接收者
public class TestBroadCastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("TestBroadCastReceiver", "onReceive: ");
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Log.i("TestBroadCastReceiver", "Receive ACTION_BOOT_COMPLETED");
        }
    }
}
           
  • 在manifest中添加开机启动权限

注意:

权限一定要加,一定要加,一定要加!

  • 在manifest中注册该广播接收者
<receiver android:name=".TestBroadCastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
           

经过以上配置之后,启动应用,重启手机,在日志中就可以过滤到代码中的日志了。

如果以上的操作未能成功,那么可能有以下原因造成:

  • 应用未启动,应用安装之后一定要启动过,这样当前应用才可能在系统的开机启动权限列表内
  • 用户安装了杀毒软件、安全管家或系统自带,这些杀毒软件或安全管家禁止掉了应用的开机启动权限。这种情况下,在手机设置应用管理中看到当前应用是已经获得了开机启动权限,但是上述log无法过滤到。这是一个很重要的原因。

    小米,vivo,酷派手机等都是这个原因

  • 手机系统管理—应用管理,开机启动权限被关闭

进阶

我们在上述部分讲的是开机启动广播,我们目前只是在接收到广播之后做了日志的打印。我们还可以在广播中做很多事情,但是由于广播的生命周期较短,如果我们需要做耗时操作,我们可以在广播中启动服务,在服务中做我们需要做的操作。