Я пытаюсь разобраться с почти полностью недокументированным Android Alarm Manager Plus, и у меня есть очень простое приложение для нажатия кнопки, установки будильника и запуска будильника следующим образом:
import 'package:flutter/material.dart';
import 'package:android_alarm_manager_plus/android_alarm_manager_plus.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.pink,
),
home: SetAlarmPage(),
);
}
}
class SetAlarmPage extends StatefulWidget {
const SetAlarmPage({Key? key}) : super(key: key);
@override
State<SetAlarmPage> createState() => _SetAlarmPageState();
}
class _SetAlarmPageState extends State<SetAlarmPage> {
String test = "Press Me!";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Set an Alarm")),
body: Center(
child: ElevatedButton(
child: Text(test),
onPressed: () {
print(test + " Button Pressed...");
setAlarm();
},
),
),
floatingActionButton:
FloatingActionButton(onPressed: null, child: Icon(Icons.add)),
);
}
void setAlarm() async {
print("setAlarm");
final int alarmID = 1;
await AndroidAlarmManager.oneShot(Duration(minutes: 1), alarmID, playAlarm);
}
void playAlarm() {
print("playAlarm");
setState(() {
test = "Pressed!";
});
}
}
Мне удается запустить службу сигнализации, но кроме этого ничего. Я пытался инициализировать объект AndroidAlarmManager как в main, так и в setAlarm, пытался перемещаться по параметру sureInitialized, пытался установить разные длительности в oneShot, пытался изменить идентификатор и пытался запустить более простую функцию будильника. Что бы я ни делал, сигнализация не включается и не срабатывает.
Я почти уверен, что это что-то простое, но для основной функции Android нет реальной документации о том, как ее использовать.
Кто-нибудь знает, чего хочет Android Alarm Manager Plus, чего я здесь не предоставляю?
сначала вы добавили необходимые теги AndroidManifest.xml
?
во-вторых, прочитав документацию по https://pub.dev/packages/android_alarm_manager_plus, обратный вызов выполняется в отдельном изоляте, поэтому вы не можете передать функцию из класса экземпляра, поскольку изоляты не разделяют память (изолировать - это запускать часть кода в другом потоке) . Вы можете убедиться, что плагин работает, добавив статическую функцию с оператором печати (вы не можете вызвать setState из статической функции)
измените функцию playAlarm на:
static void playAlarm() {
print("playAlarm");
}
эта функция используется для проверки работы плагина
Установка статики сработала, да. Мне нужно прочитать об изолятах.