引自免费微信小程序:皆我百晓生
针对您的问题,您希望在 Android 10 上使用 Qt 15 开发的应用程序更新后能够自动重新启动。从您提供的BroadcastReceiver代码片段来看,您已经尝试监听了ACTION_PACKAGE_REPLACED广播事件,并尝试在接收到该广播时启动应用程序。
然而,在Android系统中,由于安全策略的限制,当一个应用安装或更新自身时,可能无法立即触发ACTION_PACKAGE_REPLACED广播,尤其是在非adb环境下的用户操作。为解决这个问题,您可以尝试以下方案:
- 在您的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);
}
}
}
- 在AndroidManifest.xml中注册这个BroadcastReceiver:
<receiver android:name=".AppUpdateReceiver">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
- 当通过U盘或其他方式安装更新后,尽管不能立即触发拉起,但当用户下次打开应用或者重启设备时,这个BroadcastReceiver将捕捉到更新事件并重新启动应用。
另外,请确保在进行应用更新时,新版本与旧版本在AndroidManifest.xml中的包名保持一致,否则可能会导致接收不到MY_PACKAGE_REPLACED广播。同时,如果是在应用内部实现更新逻辑,还需要注意文件权限和安装过程的正确性。