Android 静默安装成功后自启动

近期开发上线一个常驻app,项目已上线,今天随笔记录一下静默安装相关内容。我分三篇静默安装(root版)、静默安装(无障碍版)、监听系统更新、卸载、安装。
先说说我的项目需求:要求app一直运行,通过指令进行自动安装并在安装成功后自动开启。行业人事都了解,非root权限不可能无声无息的完成此要求。我分两步完成了此功能开发。今天记录一下root权限下实现静默安装app。
本文通过监听系统广播的方式,实现静默安装后的自启动。

简单介绍一下相关广播

ACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)
ACTION_PACKAGE_REPLACED 一个新版本的应用安装到设备,替换之前已经存在的版本
ACTION_PACKAGE_CHANGED  一个已存在的应用程序包已经改变,包括包名
ACTION_PACKAGE_REMOVED  一个已存在的应用程序包已经从设备上移除,包括包名(正在被安装的包程序不能接收到这个广播)
ACTION_PACKAGE_RESTARTED    用户重新开始一个包,包的所有进程将被杀死,所有与其联系的运行时间状态应该被移除,包括包名(重新开始包程序不能接收到这个广播)
ACTION_PACKAGE_DATA_CLEARED 用户已经清楚一个包的数据,包括包名(清除包程序不能接收到这个广播)
 

自定义广播

// 自定义广播
class BootService : BroadcastReceiver(){
    override fun onReceive(p0: Context?, p1: Intent?) {
        p1?.let {
            val action = it.action
            when(action){
                Intent.ACTION_PACKAGE_REPLACED,Intent.ACTION_PACKAGE_REPLACED ->{
                    p0?.let {
                        con -> {
                        // 启动app
                            val intent = con.packageManager.getLaunchIntentForPackage(con.packageName)
                            intent?.flags= Intent.FLAG_ACTIVITY_NEW_TASK
                            con.startActivity(intent)
                        }
                    }
                }
                else -> {

                }
            }
        }
    }
}

注册自定义的广播

<receiver
            android:name="com.zhujing.nadedemospace.BootService"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="10000">
                <!--监听开机-->
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <!--监听关机-->
                <action android:name="android.intent.action.ACTION_SHUTDOWN" />
                <action android:name="android.intent.action.REBOOT" />
            </intent-filter>
            <intent-filter>
                <!--监听安装、更新、卸载-->
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REPLACED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <!--固定格式,注意:package为固定内容,不可修改!!!-->
                <data android:scheme="package" />
            </intent-filter>
        </receiver>

到此就完成了。注意
1、com.zhujing.nadedemospace.BootService,最好使用全路径注册,以防自定义广播注册失败!!!
2、 <data android:scheme="package" /> package是固定内容,不可修改!!!

静默安装相关内容更新完毕,欢迎各位同学指导……

上一篇:解决 Electron 14 之后版本使用 remote 模块报错-Electron 14 之前版本使用 remote 模块


下一篇:在vue项目中封装并使用WebSocket(2)