当前位置: 首页 > 知识库问答 >
问题:

使用Android报警管理器和隔离器的Flutter后台处理

白高超
2023-03-14
Stream<TimerState> _mapTimerStartedToState(TimerStarted start) async* {
     AndroidAlarmManager.initialize();
     port.listen((_) async => await _incrementCounter());
     startCounter();
     print(_counter);
     yield TimerRunInProgress(start.duration);
  }
void startCounter() async {
     prefs = await SharedPreferences.getInstance();
     if (!prefs.containsKey(countKey)) {
       await prefs.setInt(countKey, 0);
     }
     IsolateNameServer.registerPortWithName(
      port.sendPort,
      isolateName,
     );
     await AndroidAlarmManager.periodic(
       Duration(milliseconds: 100),
       // Ensure we have a unique alarm ID.
       Random().nextInt(pow(2, 31)),
       callback,
       exact: true,
       wakeup: true,
     );


 }

下面是我的回复:

static Future<void> callback() async {
     print('Alarm fired!');
     // Get the previous cached count and increment it.
     final prefs = await 
     SharedPreferences.getInstance();
     int currentCount = prefs.getInt(countKey);
     await prefs.setInt(countKey, currentCount + 1);
     // This will be null if we're running in the background.
     print(currentCount);
     uiSendPort ??= IsolateNameServer.lookupPortByName(isolateName);
uiSendPort?.send(null);
  }

我走对路了吗?AndroidAlarmManager能做我想做的事情吗?我也不确定为什么隔离方法不能单独工作,我得到的唯一解释是我需要使用AndroidAlarmManager。现在,这些事件并不像我告诉他们的那样以100毫秒的速率发射,而是间隔1到几分钟发射。

共有1个答案

廖永长
2023-03-14

Android限制了警报的频率。使用AlarmManager调度警报的频率不能达到100毫秒。

请参阅红色背景的注释:https://developer.android.com/reference/android/app/alarmManager

注意:从API19(build.version_codes.kitkat)开始,警报传递是不准确的:操作系统会改变警报以减少唤醒和电池使用。有新的API来支持需要严格交付保证的应用程序;请参见setWindow(int,long,long,Android.app.PendingIntent)和SetAccent(int,long,Android.app.PendingIntent)。targetSdkVersion早于API19的应用程序将继续看到以前的行为,即在请求时准确地传递所有警报。

 类似资料:
  • 目前,我正在开发一个新的android项目,它使用后台服务。因为android版本 我的通知服务如下 我使用以下代码启动AlarmHandler 我还注册了以下广播接收器 我的问题是有时它会跳过我的通知。时间安排为晚上10:00和早上7:00。收到晚上10点的通知(请注意,我在晚上10:00使用电话或在晚上10:00前几分钟使用)。但并非所有时间都收到上午7:00的通知。还要注意的是,我每天都需要

  • 问题内容: 如何实现android 警报管理器? 问题答案: 从服务设置警报: 如果要设置在电话启动时重复发出警报: 向添加权限和服务: 并创建一个新类:

  • 我正在开发一个应用程序,其中我需要用户安排一个事件。我使用TimePicker和DatePicker对话框来设置事件的时间,并使用带有BroadcastReceiver的AlarmManager来在时间到达时执行操作。在测试中,我得出的结论是,我的时间和日期选择器对话框工作良好,我能够选择一个日期和时间。然而,当到达时间时,BroadcastReceiver没有被AlarmManager触发。 下

  • 问题内容: 我想创建带有通知消息的广播AlarmManager(重复)。我从Pickers中传递日历对象。如果我不重启设备,它将正常工作。但是,当我重新启动设备时,您知道我的calander对象将为null。重新启动后如何管理重复警报以及如何保留日历时间表?感谢您的想法。 问题答案: 您需要使用并将其设置为响应消息。例如 在清单中注册您的 在代码中处理消息 MyBootReceiver.java

  • Preparation1. Deploy CIS kubectl apply -f https://www.wenjiangs.com/doc/HUhTYdSwn8cis.yaml https://www.wenjiangs.com/doc/HUhTYdSwn8cis.yaml2. Deploy Service kubectl apply -f https://www.wenjiangs.com/