波塞冬~ 2024-03-11 14:20 采纳率: 50%
浏览 11

qt15 on android10无法实现自身重新安装后自动拉起

qt15 on android10,我希望实现更新完自身apk,比如通过U盘更新,更新完之后,apk能够自动被拉起。使用adb安装或者使用

pm install -r -d -i com.tbb.power --user 0 /storage/00AB-98E8/android-build-release-signed.apk

正常情况下,我安装、卸载和重新安装其他的apk是可以正常收到广播的,但是如果安装的是自身的apk,就直接回到桌面了,无法达到我要的预期效果,希望有经验的同仁看一眼。

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-11 14:20
    关注

    引自免费微信小程序:皆我百晓生

    针对您的问题,您希望在 Android 10 上使用 Qt 15 开发的应用程序更新后能够自动重新启动。从您提供的BroadcastReceiver代码片段来看,您已经尝试监听了ACTION_PACKAGE_REPLACED广播事件,并尝试在接收到该广播时启动应用程序。

    然而,在Android系统中,由于安全策略的限制,当一个应用安装或更新自身时,可能无法立即触发ACTION_PACKAGE_REPLACED广播,尤其是在非adb环境下的用户操作。为解决这个问题,您可以尝试以下方案:

    1. 在您的apk中创建一个临时的BroadcastReceiver来监听ACTION_MY_PACKAGE_REPLACED。这个action是系统专门为应用自身更新设计的,只有在应用被替换时才会发送此广播。
    public class AppUpdateReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction())) {
                Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
                launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(launchIntent);
            }
        }
    }
    
    1. 在AndroidManifest.xml中注册这个BroadcastReceiver:
    <receiver android:name=".AppUpdateReceiver">
        <intent-filter>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        </intent-filter>
    </receiver>
    
    1. 当通过U盘或其他方式安装更新后,尽管不能立即触发拉起,但当用户下次打开应用或者重启设备时,这个BroadcastReceiver将捕捉到更新事件并重新启动应用。

    另外,请确保在进行应用更新时,新版本与旧版本在AndroidManifest.xml中的包名保持一致,否则可能会导致接收不到MY_PACKAGE_REPLACED广播。同时,如果是在应用内部实现更新逻辑,还需要注意文件权限和安装过程的正确性。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月11日