Resolving OnBackInvokedCallback Warning in Android
Problem Statement
When developing Android applications targeting API level 33 (Android 13) or higher, you may encounter this warning in Logcat:
OnBackInvokedCallback is not enabled for the application.
Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
This warning appears because Android 13 introduced a new back navigation system using OnBackInvokedCallback
. The warning is simply reminding you to explicitly declare your app's compatibility with the new back navigation system.
WARNING
While this is just a warning and won't crash your app, addressing it ensures your app is properly configured for Android's new back navigation architecture and prevents unexpected behavior in future OS updates.
Solution
To resolve this warning, explicitly enable the new back navigation callback by adding the android:enableOnBackInvokedCallback
attribute to your <application>
tag in the AndroidManifest.xml file.
Implementation Steps
Required Tools
- Android Studio (latest stable version recommended)
- Android Gradle Plugin 7.0+
- Compile SDK Version 33 or higher
- Open
AndroidManifest.xml
in yourapp/src/main
directory - Locate the
<application>
tag - Add the
android:enableOnBackInvokedCallback="true"
attribute
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourcompany.yourapp">
<application
android:name=".MainApplication"
android:enableOnBackInvokedCallback="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Your activities and other components here -->
</application>
</manifest>
What If I'm Not Ready to Implement the New Back Navigation?
If you're not ready to adopt the predictive back gesture features, you can explicitly disable the callback:
<application
...
android:enableOnBackInvokedCallback="false">
Important Considerations
- Android requires this attribute for apps targeting API 33+
- If omitted, the warning will persist in Logcat
- Google recommends enabling the new back navigation for Android 13+ apps
- Setting to
false
opts your app out of the predictive back gesture system
Understanding the Context
Why Does This Warning Exist?
Android 13 introduced significant changes to back navigation through the Predictive Back Gesture API. The new system replaces KeyEvent.KEYCODE_BACK
handling with a callback-based architecture (OnBackInvokedCallback
).
Modern Back Navigation Explained
Key Differences Between Approaches
Approach | Manifest Attribute | Navigation System | Predictive Back Support |
---|---|---|---|
Legacy System | Not declared | KeyEvent.KEYCODE_BACK | ❌ No |
Explicit Opt-out | android:enable...="false" | KeyEvent.KEYCODE_BACK | ❌ No |
Modern System | android:enable...="true" | OnBackInvokedCallback | ✔️ Yes |
Best Practices
- Enable for new development: Always add
android:enableOnBackInvokedCallback="true"
when targeting Android 13+ - Consistency across activities: Ensure all activities handle back events uniformly
- Test thoroughly: Verify back navigation behavior in different scenarios
- Use AndroidX components: Components like
OnBackPressedDispatcher
automatically integrate with the new system
Alternative Implementation via Theme
You can achieve the same result by setting the attribute in your app's theme if you manage all configurations centrally:
<!-- res/values/themes.xml -->
<style name="Theme.YourApp" parent="Theme.Material3.DayNight">
<item name="android:enableOnBackInvokedCallback">true</item>
</style>
Complete Solution Implementation
<!-- AndroidManifest.xml -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.myapp">
<application
android:name=".MyApplication"
android:enableOnBackInvokedCallback="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApp"
tools:targetApi="33">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
After making this change, rebuild your app (Build > Clean Project
then Build > Rebuild Project
), and the warning should no longer appear in Logcat when running your application.
Migration to Modern Back Navigation
After enabling the callback:
- Migrate from
onBackPressed()
toOnBackInvokedCallback
- Use
getOnBackInvokedDispatcher().registerCallback()
in activities - Use predictive back animations for seamless UX
By properly configuring this setting, your app becomes compatible with Android's modern navigation systems and prepares for future improvements in gesture navigation.