You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用Flexible内更新前台下载异常及Immediate更新重启问题

Android应用内更新问题解决方案

问题1:Flexible更新无法后台下载,触发后显示全屏进度界面

你的代码中onResume方法存在逻辑错误:当检测到DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS时,无论当前是哪种更新类型,都调用了requestImmediateUpdate,这会把正在进行的Flexible更新强制转为Immediate更新,导致后台下载失效,出现全屏进度界面。

修复方法:在onResume中判断当前更新类型,对应恢复流程:

@Override
protected void onResume() {
    super.onResume();

    appUpdateManager.getAppUpdateInfo().addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
            // 根据当前更新类型恢复对应流程
            if (appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
                requestImmediateUpdate(appUpdateInfo);
            } else if (appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
                requestFlexibleUpdate(appUpdateInfo);
            }
        }
    });
}

同时,为Flexible更新注册状态监听器,监听下载进度与完成状态:

private InstallStateUpdatedListener installStateUpdatedListener = state -> {
    if (state.installStatus() == InstallStatus.DOWNLOADED) {
        // 下载完成后提示用户触发安装
        showPostUpdateInstallPrompt();
    }
};

@Override
protected void onStart() {
    super.onStart();
    appUpdateManager.registerListener(installStateUpdatedListener);
}

@Override
protected void onStop() {
    super.onStop();
    appUpdateManager.unregisterListener(installStateUpdatedListener);
}

问题2:Immediate更新安装完成后不自动重启应用

Immediate更新默认不会自动重启应用,需通过监听系统广播实现安装完成后的自动重启:

  1. 实现广播接收器:
public class UpdateCompleteReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())) {
            String updatedPackage = intent.getData().getSchemeSpecificPart();
            if (context.getPackageName().equals(updatedPackage)) {
                // 重启应用
                Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(updatedPackage);
                if (launchIntent != null) {
                    launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    context.startActivity(launchIntent);
                }
            }
        }
    }
}
  1. 动态注册接收器(适配Android 8.0及以上版本,静态注册无法接收该广播):
private UpdateCompleteReceiver updateReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    registerUpdateReceiver();
    checkForInAppUpdate();
}

private void registerUpdateReceiver() {
    updateReceiver = new UpdateCompleteReceiver();
    IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REPLACED);
    filter.addDataScheme("package");
    registerReceiver(updateReceiver, filter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(updateReceiver);
}

内容的提问来源于stack exchange,提问作者amo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:24:16