gpt4 book ai didi

Flutter 中的 Android Alarm Manager Plus 从不触发 oneShot

转载 作者:行者123 更新时间:2023-12-04 23:58:37 24 4
gpt4 key购买 nike

我正在尝试处理几乎完全未记录的 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!";
});
}
}

我设法启动了警报服务,但除此之外,什么也没有。我尝试在 main 和 setAlarm 中初始化 AndroidAlarmManager 对象,尝试在 ensureInitialized 中移动,尝试在 oneShot 中设置不同的持续时间,尝试更改 ID,并尝试触发更简单的警报功能。无论我做什么,闹钟都不会响起。

我很确定它很简单,但是对于 android 的核心功能,没有关于如何使用它的真正文档。

有谁知道我在这里没有提供的 android alarm manager plus 想要什么?

最佳答案

首先你是否添加了所需的 AndroidManifest.xml 标签?

第二件事,阅读 https://pub.dev/packages/android_alarm_manager_plus 上的文档,回调在单独的 Isolate 上执行,因此您不能从实例类传递函数,因为 isolate 不共享内存(isolate 是在另一个线程上运行一段代码)。您可以通过使用 print 语句添加静态函数来确保插件正常工作(您不能从静态函数调用 setState)

将 playAlarm 函数更改为:

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

此函数用于验证插件是否正常工作

关于Flutter 中的 Android Alarm Manager Plus 从不触发 oneShot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71540743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com