繁体   English   中英

替换自身后自动重启Android应用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM