Flutter - 如何在应用程序处于后台时在特定时间执行功能?

Posted

技术标签:

【中文标题】Flutter - 如何在应用程序处于后台时在特定时间执行功能?【英文标题】:Flutter - How to execute a function at a specific time when the app is in background? 【发布时间】:2021-08-03 20:04:29 【问题描述】:

我想在特定时间执行一个功能,但要在应用关闭时执行。该函数将显示一个通知。

这是我要执行的功能:

Future<void> dailyNotification() async 
DateTime now= DateTime.now();
Time reviewTime = Time(13, 02, 20 );
DateTime notTime = DateTime(now.year, now.month, now.day, reviewTime.hour, reviewTime.minute, reviewTime.second);
var androidChannelSpecifics = AndroidNotificationDetails(
  'CHANNEL_ID 2',
  'CHANNEL_NAME 2',
  "CHANNEL_DESCRIPTION 2",
  importance: Importance.max,
  priority: Priority.high,
 );
 var iosChannelSpecifics = IOSNotificationDetails();
 var platformChannelSpecifics =
 NotificationDetails(android: androidChannelSpecifics, iOS: iosChannelSpecifics);
 await flutterLocalNotificationsPlugin.zonedSchedule(
   2,
   'Test Title at $reviewTime.hour:$reviewTime.minute.$reviewTime.second',
   'Test Body', //null
    notTime,
    platformChannelSpecifics,
    payload: 'Test Payload',
   );
 

编辑:

根据 Tirth Patel 在帖子中的建议,我已经这样实现了:

void callbackDispatcher() 
 Workmanager().executeTask((taskName, inputData) async 
notificationPlugin.showDailyAtTime();
return Future.value(true);
 );


void main() async 
WidgetsFlutterBinding.ensureInitialized();
await Workmanager().initialize(callbackDispatcher);
Workmanager().registerPeriodicTask(
  "1",
  "simplePeriodicTask",
  frequency: Duration(minutes: 15),
);
runApp(MyApp());

但是,它仍然不起作用。我正在使用颤振本地通知包。

我还不能解决这个问题。

请帮帮我。

感谢您的回复。

【问题讨论】:

这能回答你的问题吗? How to schedule background tasks in Flutter? 感谢您的回复@TirthPatel 我已使用 workmanager 将代码作为您分享的问题中的第一个解决方案实现。它不工作。请帮忙。 您没有调用 registerPeriodicTask 或 registerOneOffTask。检查这个:github.com/fluttercommunity/… 我在调用函数后更新了问题。 我没有在您的代码中阅读 showDailyAtTime(此功能已弃用)(我假设它是通知插件的一部分),您可能不需要 workmanager。检查这个:pub.dev/documentation/flutter_local_notifications/latest/… 【参考方案1】:

一些安卓设备制造公司不允许安卓手机在后台运行,我相信你的设备可能就是其中之一。

解决方案我们需要在应用的设置中启用自动启动以保持服务运行。 (应用信息 -> 自动启动 -> 启用)

【讨论】:

你说的我试过了,还是不行 添加打印日志并在android studio logcat中签入,就会出现。我希望你杀死你的应用程序并再次启动它

以上是关于Flutter - 如何在应用程序处于后台时在特定时间执行功能?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:当应用程序处于后台但未在 iOS 中终止时,无法在通知单击时重定向到特定屏幕

如何在应用程序处于后台模式时在 iOS 10 中播放自定义音频

当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?

应用程序进入后台时在 Flutter 上显示本地通知

Flutter 推送通知仅在应用程序处于后台时有效

如何在应用程序运行 ios 时在后台进行服务调用