Я разрабатываю приложение .NET Maui. Он загружается неопубликовано и не использует Google Play Store.
Я хочу обновить приложение, загрузив новый Apk и запустив действие ACTION_VIEW в Apk. Это отлично подходит для обновления приложения.
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.