【问题标题】:Automatically restart Android application after replacing itself更换自身后自动重启安卓应用
【发布时间】:2018-08-14 21:47:32
【问题描述】:

我有一个 Android 应用程序,它安装更新并通过 PackageManager 自行替换,但我还没有找到一种方法来自动打开自己,因为它主要没有运行以接收任何广播/服务等。我有签名级权限,但我认为这没有帮助。我正在运行 Android 6.0.1。

我尝试使用pm install -r packagename.apk ; am start -n packagename/MainActivity 来链接命令,但它对重新启动没有帮助,主要是因为应用程序在它自己启动之前就被杀死了。

我不是在寻找 PackageManager 的“打开”和“取消”,而是自动重启。

我也可以重启设备然后运行它?

Android应用更换后如何自动重启?

更新

我最终只使用包管理器“完成”和“打开”对话框,因为我找不到更好的选择。

【问题讨论】:

    标签: android apk android-package-managers android-install-apk


    【解决方案1】:

    您可以使用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)
       }
    }  
    

    希望这会有所帮助。

    【讨论】:

    • 我不能依赖 Activity 中的任何代码,因为如果应用程序未运行(它已经自行替换),这些接收器将不会运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多