我已经在下面编写了代码(可完全运行),当我运行该应用程序时,会显示一条通知,但AlarmManager无法按预期工作。正如我告诉他的那样,它不会每分钟显示一条通知...我该如何解决?提前Thx并保持<3
编码class _MyHomePageState extends State<MyHomePage>
{
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
var initializationSettings;
var initializationSettingsAndroid;
@override
Widget build(BuildContext context)
{
initializationSettingsAndroid = new AndroidInitializationSettings("@mipmap/ic_launcher");
initializationSettings = InitializationSettings(initializationSettingsAndroid, null);
flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification);
createTimer();
return Scaffold
(
appBar: AppBar
(
title: Text(widget.title),
),
body: Container()
);
}
void createTimer() async
{
final int alarmID = 0;
showNotificationWithDefaultSound();
await AndroidAlarmManager.initialize();
await AndroidAlarmManager.periodic(const Duration(minutes: 1), alarmID, showNotificationWithDefaultSound);
}
Future showNotificationWithDefaultSound() async
{
var androidPlatformChannelSpecifics = new AndroidNotificationDetails('idNotification', 'AppName', 'Description', importance: Importance.Max, priority: Priority.High);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(0, 'New Notification', 'This is the text of the notification', platformChannelSpecifics, payload: 'Hi guys and girls!!');
}
Future onSelectNotification(String payload) async
{
showDialog(context: context, builder: (_)
{
return new AlertDialog(title: Text("PayLoad"), content: Text("Payload : $payload"));
});
}
}
答案 0 :(得分:2)
最后我找到了解决方案... 这是完整的示例。
https://github.com/Anon-65535/SimpleBackgroundTimer
首先,使main()
“异步” 然后初始化AndroidAlarmManager
;
void main() async
{
WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
runApp(MainClass());
}
在包中创建alarmManager.dart
,其中的类称为NotificationManager
;
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class NotificationManager
{
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
AndroidInitializationSettings initializationSettingsAndroid;
IOSInitializationSettings initializationSettingsIOS;
InitializationSettings initializationSettings;
void initNotificationManager()
{
initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');
initializationSettingsIOS = new IOSInitializationSettings();
initializationSettings = new InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);
flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
void showNotificationWithDefaultSound(String title, String body)
{
var androidPlatformChannelSpecifics = new AndroidNotificationDetails('your channel id', 'your channel name', 'your channel description', importance: Importance.Max, priority: Priority.High);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
flutterLocalNotificationsPlugin.show(0, title, body, platformChannelSpecifics);
}
}
然后在您喜欢的.dart
文件中创建任何类的回调 (该回调将从AndroidAlarmManager
创建的后台线程中调用);
alarmCallback()
{
NotificationManager n = new NotificationManager();
n.initNotificationManager();
n.showNotificationWithDefaultSound("Prova", "Prova");
print("[*] Called from AlarmManager");
return;
}
最后以这种方式从AlarmManager创建后台线程(在定义了回调的.dart
文件中导入此.dart
文件:
AndroidAlarmManager.oneShotAt(DateTime.now().add(Duration(seconds: 10)),
0,
alarmCallback,
exact: true,
allowWhileIdle: true,
wakeup: true,
rescheduleOnReboot: true,
alarmClock: true);
//This will call your callback in 10 seconds from now (Datetime.now())
保持<3
编码