近期开发上线一个常驻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.actionwhen(action){Intent.ACTION_PACKAGE_REPLACED,Intent.ACTION_PACKAGE_REPLACED ->{p0?.let {con -> {// 启动appval intent = con.packageManager.getLaunchIntentForPackage(con.packageName)intent?.flags= Intent.FLAG_ACTIVITY_NEW_TASKcon.startActivity(intent)}}}else -> {}}}}
}
注册自定义的广播
<receiverandroid: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是固定内容,不可修改!!!
静默安装相关内容更新完毕,欢迎各位同学指导……