large Flutter Favorite logosmall Flutter Favorite logo

android_alarm_manager_plus 2.0.6+1 icon indicating copy to clipboard operation
android_alarm_manager_plus: ^2.0.6+1 copied to clipboard

PlatformAndroid

Flutter plugin for accessing the Android AlarmManager service, and running Dart code in the background when alarms fire.

android_alarm_manager_plus #

Flutter Community: android_alarm_manager_plus

pub package android_alarm_manager_plus

A Flutter plugin for accessing the Android AlarmManager service, and running Dart code in the background when alarms fire.

Platform Support #

Android
✔️

Getting Started #

After importing this plugin to your project as usual, add the following to your AndroidManifest.xml within the <manifest></manifest> tags:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- For apps with targetSDK=31 (Android 12) -->
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>

Next, within the <application></application> tags, add:

<service
    android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmService"
    android:permission="android.permission.BIND_JOB_SERVICE"
    android:exported="false"/>
<receiver
    android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmBroadcastReceiver"
    android:exported="false"/>
<receiver
    android:name="dev.fluttercommunity.plus.androidalarmmanager.RebootBroadcastReceiver"
    android:enabled="false"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Check out our documentation website to learn more. Plus plugins documentation

Then in Dart code add:

import 'package:android_alarm_manager_plus/android_alarm_manager_plus.dart';

static void printHello() {
  final DateTime now = DateTime.now();
  final int isolateId = Isolate.current.hashCode;
  print("[$now] Hello, world! isolate=${isolateId} function='$printHello'");
}

main() async {
  // Be sure to add this line if initialize() call happens before runApp()
  WidgetsFlutterBinding.ensureInitialized();

  await AndroidAlarmManager.initialize();
  runApp(...);
  final int helloAlarmID = 0;
  await AndroidAlarmManager.periodic(const Duration(minutes: 1), helloAlarmID, printHello);
}

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 callbacks #

If 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.

Plugin Development #

Running Flutter unit tests #

Run normally with flutter test from the root of the project.

Running Espresso tests #

The 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:

./gradlew app:connectedAndroidTest -Ptarget=`pwd`/../lib/main_espresso.dart

Running End-to-end Flutter Driver tests #

To run the Flutter Driver tests, cd into example and run:

flutter driver test_driver/android_alarm_manager_plus_e2e.dart

Important: As of January 2021, the Flutter team is no longer accepting non-critical PRs for the original set of plugins in flutter/plugins, and instead they should be submitted in this project. You can read more about this announcement here. as well as in the Flutter 2 announcement blog post.

240
likes
130
pub points
95%
popularity

Publisher

verified publisher iconfluttercommunity.dev

Flutter plugin for accessing the Android AlarmManager service, and running Dart code in the background when alarms fire.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

Icon for licenses.BSD-3-Clause (LICENSE)

Dependencies

flutter

More

Packages that depend on android_alarm_manager_plus