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

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日

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)