Android开机启动

说明

本文实现一个Android开启时启动一个app或者service,在Android系统启动之后,系统会发布一个RECEIVE_BOOT_COMPLETED的广播信号,我们只要接受这个广播信号并进行处理就可以实现开机启动的效果。因实现原理比较简单,所以这就不对技术层面的东西进行细讲。

权限

首先在你的AndroidManifest.xml添加一个开机启动的权限。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

接收

我们先创建一个BroadcastReceiver来接收系统的广布,我这里的名字为BroadcastReceiverImpl,具体的代码如下:

/**
 * 系统广播接收者
 */
class BroadcastReceiverImpl: BroadcastReceiver(), KIExtensionContext {

    /**
     * 接收广播入口函数
     */
    override fun onReceive(context: Context, intent: Intent) {
        when (intent.action) {
            /*
             * 开机启动的信号标识
             */
            "android.intent.action.BOOT_COMPLETED" -> {

                /*
                 * 启动应用本身,launchAppByPackage实现代码:http://t.cn/EZ29zEV
                 */
                context.launchAppByPackage(BuildConfig.APPLICATION_ID)

                /*
                 * 启动一个Service
                 */
                context.startService(Intent(context, ServiceHttpd::class.java))
            }

            /**
             * 其他的信号
             */
            else -> { }
        }
    }
}

配置

有了上面的代码还不行,还得添加对应的声明才可以。

<!-- 应用广播的接收者 -->
<receiver android:name="com.sollyu.appenv.api.broadcast.BroadcastReceiverImpl" >
    <intent-filter>
        <!-- 接收开机启动广播 -->
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

其他

因为开机启动也算一个比较敏感的权限,所以国内的系统都差不多吧这个权限压的死死的,就比如MIUI、魅族、OPPO、VIVO,如果你不在他们的安全中心运行开机启动,你APP是收不到信息的。

如果收不到BOOT_COMPLETED的消息,你可以像办法把软件设置成系统应用就可以了。😋

点赞