[英]Automatically restart Android application after replacing itself
我有一个 Android 应用程序,它安装更新并通过PackageManager
替换自身,但我还没有找到一种方法可以在之后自动打开自身,因为主要是它没有运行以接收任何广播/服务等。我有签名级别的权限,但我不要认为它有帮助。 我正在运行 Android 6.0.1。
我试过执行pm install -r packagename.apk; am start -n packagename/MainActivity
pm install -r packagename.apk; am start -n packagename/MainActivity
链接命令,但它无助于重新启动,主要是因为该应用程序在它可以自行启动之前被杀死。
我不是在寻找 PackageManager“打开”和“取消”,而是自动重启。
我也可以重启设备然后运行它吗?
如何在替换后自动重启 Android 应用程序?
更新
我最终只使用 package 管理器“完成”和“打开”对话框,因为我找不到更好的选择。
您可以使用android.intent.action.MY_PACKAGE_REPLACED
的意图过滤器注册用于应用程序包更新的简单广播。
将此添加到您的清单:
<receiver
android:name=".AppUpdateReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
并创建广播接收器(例如AppUpdateReceiver.kt)以重新启动应用。
class AppUpdateReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.i(tag, "App Updated, Relauncing...")
val intent = Intent(context?.applicationContext, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context?.startActivity(intent)
}
}
希望这可以帮助。
尝试使用运行时执行而不是应用程序进程。 (在有根设备上测试)
private static void install(String apkPath) {
System.out.println("Installing APK please... " + apkPath);
try
{
Runtime.getRuntime().exec(new String[] {"su 0 ", "pm install -r "+apkPath+ " && am start -n com.example/com.example.activity.MainActivity"});
}
catch (IOException e)
{
System.out.println(e.toString());
}
System.out.println("Finished installing APK");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.