[android_alarm_manager] Fixed issue where callback lookup was failing in the background (#2453)
If callback lookup was attempted before Flutter was initialized, the
callback cache would not yet be populated resulting in a failed callback
lookup.
diff --git a/packages/android_alarm_manager/CHANGELOG.md b/packages/android_alarm_manager/CHANGELOG.md
index 1a744c9..32fdb76 100644
--- a/packages/android_alarm_manager/CHANGELOG.md
+++ b/packages/android_alarm_manager/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.5+3
+
+* Fixed issue where callback lookup would fail while running in the background.
+
## 0.4.5+2
* Remove the deprecated `author:` field from pubspec.yaml
diff --git a/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/FlutterBackgroundExecutor.java b/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/FlutterBackgroundExecutor.java
index c7eebc2..4e755c3 100644
--- a/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/FlutterBackgroundExecutor.java
+++ b/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/FlutterBackgroundExecutor.java
@@ -151,17 +151,22 @@
return;
}
- FlutterCallbackInformation flutterCallback =
- FlutterCallbackInformation.lookupCallbackInformation(callbackHandle);
- if (flutterCallback == null) {
- Log.e(TAG, "Fatal: failed to find callback");
- return;
- }
Log.i(TAG, "Starting AlarmService...");
String appBundlePath = FlutterMain.findAppBundlePath(context);
AssetManager assets = context.getAssets();
if (appBundlePath != null && !isRunning()) {
backgroundFlutterEngine = new FlutterEngine(context);
+
+ // We need to create an instance of `FlutterEngine` before looking up the
+ // callback. If we don't, the callback cache won't be initialized and the
+ // lookup will fail.
+ FlutterCallbackInformation flutterCallback =
+ FlutterCallbackInformation.lookupCallbackInformation(callbackHandle);
+ if (flutterCallback == null) {
+ Log.e(TAG, "Fatal: failed to find callback");
+ return;
+ }
+
DartExecutor executor = backgroundFlutterEngine.getDartExecutor();
initializeMethodChannel(executor);
DartCallback dartCallback = new DartCallback(assets, appBundlePath, flutterCallback);
diff --git a/packages/android_alarm_manager/pubspec.yaml b/packages/android_alarm_manager/pubspec.yaml
index 4852a3a..c0fc46e 100644
--- a/packages/android_alarm_manager/pubspec.yaml
+++ b/packages/android_alarm_manager/pubspec.yaml
@@ -1,7 +1,7 @@
name: android_alarm_manager
description: Flutter plugin for accessing the Android AlarmManager service, and
running Dart code in the background when alarms fire.
-version: 0.4.5+2
+version: 0.4.5+3
homepage: https://github.com/flutter/plugins/tree/master/packages/android_alarm_manager
dependencies: