安卓静默更新apk,然后重新启动应用程序



好吧,首先我想清除,我不想实现任何可疑的事情。我们有自己的企业应用程序,只能与我们自己的硬件一起使用(我们不使用Google Play商店(。手机也是扎根的。我已经实现了我们自己的 Apk 更新机制。到目前为止,我已经使用以下代码成功静默安装了apk

try {
val command = "pm install -r " + file.path
val openAppCommand = "am start -a android.intent.action.MAIN -n" +
BuildConfig.APPLICATION_ID + "/.MainActivity"
val process = Runtime.getRuntime().exec(arrayOf("su", "-c", command, openAppCommand))
val exitVal = process.waitFor()
if (process.exitValue() == 0) {
Log.e("updateAppSilently", "Apk installed")
} else {
Log.e("updateAppSilently", "Something went wrong while installing apk")
}
} catch (e: Exception) {
e.printStackTrace()
}

openAppCommand 被忽略,因为重新启动后当前进程被杀死。

我什至尝试过

<receiver android:name="com.updatesmanager.AppUpdateBroadcastReceiver"
android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
</intent-filter>
</receiver>

和类文件

class AppUpdateBroadcastReceiver : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("AppUpdateBroadcastReceiver", "App got updated!")
val intent = Intent(context, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context?.startActivity(intent)

/* Log.d("AppUpdateBroadcastReceiver", "App got updated!")
val command = "am start -a android.intent.action.MAIN -n" +
BuildConfig.APPLICATION_ID + "/.MainActivity"
val process = Runtime.getRuntime().exec(arrayOf("su", "-c", command))
val exitVal =  process.waitFor()
if(exitVal == 0){
Log.e("AppUpdateBroadcastReceiver", "App launched")
}*/
}
}

我什至尝试设置闹钟,但它不起作用,因为应用程序已更新/重新安装,因此警报被清除。

非常感谢任何形式的帮助。

好吧,虽然这很愚蠢,但我没有更新更新apk的版本代码(尽管我坚信广播接收器应该在运行pm install -r命令时触发,无论版本代码如何,因为包被替换了(。当我从当前 apk 增加版本代码时。AppUpdateBroadcastReceiver 确实被触发了。

最新更新