After importing this plugin to your project as usual, add the following to your
AndroidManifest.xml
within the <manifest></manifest>
tags:
Next, within the <application></application>
tags, add:
Then in Dart code add:
printHello
will then run (roughly) every minute, even if the main app ends. However, printHello
will not run in the same isolate as the main application. Unlike threads, isolates do not share
memory and communication between isolates must be done via message passing (see more documentation on
isolates here).
#
Using other plugins in alarm callbacksIf alarm callbacks will need access to other Flutter plugins, including the alarm manager plugin itself, it may be necessary to inform the background service how to initialize plugins depending on which Flutter Android embedding the application is using.
#
Flutter Android Embedding V2 (Flutter Version >= 1.12)For the Flutter Android Embedding V2, plugins are registered with the background
isolate via reflection so AlarmService.setPluginRegistrant
does not need to be
called.
NOTE: this plugin is not completely compatible with the V2 embedding on
Flutter versions < 1.12 as the background isolate will not automatically
register plugins. This can be resolved by running flutter upgrade
to upgrade
to the latest Flutter version.
#
Flutter Android Embedding V1 (DEPRECATED)For the Flutter Android Embedding V1, the background service must be provided a
callback to register plugins with the background isolate. This is done by giving
the AlarmService
a callback to call the application's onCreate
method. See the example's
Application overrides.
In particular, its Application
class is as follows:
Which must be reflected in the application's AndroidManifest.xml
. E.g.:
Note: Not calling AlarmService.setPluginRegistrant
will result in an exception being
thrown when an alarm eventually fires.
#
Plugin Development#
Running Flutter unit testsRun normally with flutter test
from the root of the project.
#
Running Espresso testsThe Espresso test runs the same sample code provided in example/lib/main.dart
but is run using the Flutter Espresso plugin.
Modifying the main.dart
will cause this test to fail.
This test will call into the example/lib/main_espresso.dart
file which
will enable Flutter Driver and then calls into the main.dart
.
See https://pub.dev/packages/espresso for more info on why.
To run the test, run from the example/android
folder:
#
Running End-to-end Flutter Driver testsTo run the Flutter Driver tests, cd into example
and run: