diff --git a/api/Avalonia.Android.nupkg.xml b/api/Avalonia.Android.nupkg.xml
index da33e03f2c..3b98b436f2 100644
--- a/api/Avalonia.Android.nupkg.xml
+++ b/api/Avalonia.Android.nupkg.xml
@@ -1,4 +1,4 @@
-
+
@@ -13,4 +13,4 @@
baseline/net8.0-android34.0/Avalonia.Android.dll
target/net8.0-android34.0/Avalonia.Android.dll
-
\ No newline at end of file
+
diff --git a/src/Android/Avalonia.Android/AvaloniaActivity.cs b/src/Android/Avalonia.Android/AvaloniaActivity.cs
index e810de050c..6ecd8367ae 100644
--- a/src/Android/Avalonia.Android/AvaloniaActivity.cs
+++ b/src/Android/Avalonia.Android/AvaloniaActivity.cs
@@ -21,13 +21,14 @@ namespace Avalonia.Android;
/// Common implementation of android activity that is integrated with Avalonia views.
/// If you need a base class for main activity of Avalonia app, see or .
///
-public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInvokedCallback
+public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity
{
private EventHandler? _onActivated, _onDeactivated;
private GlobalLayoutListener? _listener;
private object? _content;
private bool _contentViewSet;
internal AvaloniaView? _view;
+ private BackPressedCallback? _currentBackPressedCallback;
public Action? ActivityResult { get; set; }
public Action? RequestPermissionsResult { get; set; }
@@ -132,7 +133,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInv
if (OperatingSystem.IsAndroidVersionAtLeast(33))
{
- OnBackInvokedDispatcher.UnregisterOnBackInvokedCallback(this);
+ _currentBackPressedCallback?.Remove();
+ _currentBackPressedCallback = null;
}
base.OnStop();
@@ -144,7 +146,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInv
if (OperatingSystem.IsAndroidVersionAtLeast(33))
{
- OnBackInvokedDispatcher.RegisterOnBackInvokedCallback(IOnBackInvokedDispatcher.PriorityDefault, this);
+ _currentBackPressedCallback = new BackPressedCallback(this);
+ OnBackPressedDispatcher.AddCallback(this, _currentBackPressedCallback);
}
base.OnStart();
}
diff --git a/src/Android/Avalonia.Android/BackPressedCallback.cs b/src/Android/Avalonia.Android/BackPressedCallback.cs
new file mode 100644
index 0000000000..18c8c4b0bc
--- /dev/null
+++ b/src/Android/Avalonia.Android/BackPressedCallback.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using AndroidX.Activity;
+
+namespace Avalonia.Android
+{
+ internal class BackPressedCallback(AvaloniaActivity activity) : OnBackPressedCallback(true)
+ {
+ public override void HandleOnBackPressed()
+ {
+ activity.OnBackInvoked();
+ }
+ }
+}