Android Alarm Manager Plus во Flutter никогда не запускает oneShot

Я пытаюсь разобраться с почти полностью недокументированным 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, чего я здесь не предоставляю?

2
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

сначала вы добавили необходимые теги AndroidManifest.xml?

во-вторых, прочитав документацию по https://pub.dev/packages/android_alarm_manager_plus, обратный вызов выполняется в отдельном изоляте, поэтому вы не можете передать функцию из класса экземпляра, поскольку изоляты не разделяют память (изолировать - это запускать часть кода в другом потоке) . Вы можете убедиться, что плагин работает, добавив статическую функцию с оператором печати (вы не можете вызвать setState из статической функции)

измените функцию playAlarm на:

  static void playAlarm() {
    print("playAlarm");
  }

эта функция используется для проверки работы плагина

Установка статики сработала, да. Мне нужно прочитать об изолятах.

RNPF 23.03.2022 01:23

Другие вопросы по теме