From 6880bed495226e7b87e9ef08fc552c0bcfd5fc29 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 29 Jul 2026 19:45:40 -0700 Subject: [PATCH] Fixed java.lang.ClassNotFoundException: Didn't find class "android.window.OnBackInvokedCallback" on Android 8.0 --- .../main/java/org/libsdl/app/SDLActivity.java | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index b495e8773d..b1dfa9f221 100644 --- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -787,25 +787,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh } } - static OnBackInvokedCallback backButtonCallback = new OnBackInvokedCallback() { - Handler mBackKeyHandler; - - @Override - public void onBackInvoked() { - if (mBackKeyHandler == null) { - mBackKeyHandler = new Handler(Looper.getMainLooper()); - } - - onNativeKeyDown(KeyEvent.KEYCODE_BACK); - mBackKeyHandler.postDelayed(new Runnable() { - @Override - public void run() { - onNativeKeyUp(KeyEvent.KEYCODE_BACK); - } - }, 500); - } - }; - + static OnBackInvokedCallback backButtonCallback; static boolean mBackKeyTrapEnabled = false; public static void setBackButtonTrapEnabled(boolean enabled) { @@ -819,6 +801,27 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh return; } + if (backButtonCallback == null) { + backButtonCallback = new OnBackInvokedCallback() { + Handler mBackKeyHandler; + + @Override + public void onBackInvoked() { + if (mBackKeyHandler == null) { + mBackKeyHandler = new Handler(Looper.getMainLooper()); + } + + onNativeKeyDown(KeyEvent.KEYCODE_BACK); + mBackKeyHandler.postDelayed(new Runnable() { + @Override + public void run() { + onNativeKeyUp(KeyEvent.KEYCODE_BACK); + } + }, 500); + } + }; + } + if (enabled) { mSingleton.getOnBackInvokedDispatcher().registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_DEFAULT, backButtonCallback); }