近期开发上线一个常驻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是固定内容,不可修改!!!
静默安装相关内容更新完毕,欢迎各位同学指导……