我正在开发一个 .NET Maui 应用程序。它是侧面加载的,不使用 Google Play 商店。
我想通过下载新的 Apk 并在该 Apk 上启动 ACTION_VIEW 活动来更新应用程序。这对于更新应用程序非常有用。
var installIntent = new Intent(Intent.ActionView);
installIntent.AddFlags(ActivityFlags.ClearTop);
installIntent.AddFlags(ActivityFlags.GrantReadUriPermission);
installIntent.SetDataAndType(apkUri?.NormalizeScheme(), GetMimeType());
MainActivity.Current.StartActivityForResult(installIntent, Config.UPDATE_ACTIVITY_REQUEST_CODE );
但是,我需要在应用程序更新或更新取消后采取一些操作。为此,我在 MainActivity 中有以下方法:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent? data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == Config.UPDATE_ACTIVITY_REQUEST_CODE)
{
if (resultCode == Result.Ok)
{
// Do things after sucessfull update
}
else if (resultCode == Result.Canceled)
{
// Do things after canceled update
}
}
}
如果用户拒绝更新,则会调用 OnActivityResult,一切都会按预期进行。如果用户接受更新,应用程序将自动重新启动,并且永远不会调用 OnActivityResult。
如何在应用程序重新启动之前或之后调用 OnActivityResult?或者我使用 ActivityResult 走错了路?
这是预期的行为:应用程序在更新时被终止,因此您不能使用 onActivityResult 来执行它。一个可能的解决方案是在 AndroidManifest 中使用 ACTION_MY_PACKAGE_REPLACED 注册广播接收器。