Android Alarm Manager不适用于Flutter Project App
发布时间:2020-12-14 14:48:33 所属栏目:百科 来源:网络整理
导读:我在New Flutter应用程序中安装了 Android Alarm Manager插件.我使用插件的示例代码 – 但它在控制台中出错. 请建议如何使android报警管理器插件工作. 如何将Dart的android_alarm_manager集成到应用程序中,以便用户在计划中选择的时间到达时会收到警报? 我
我在New Flutter应用程序中安装了
Android Alarm Manager插件.我使用插件的示例代码 – 但它在控制台中出错.
请建议如何使android报警管理器插件工作. 我使用此链接中的代码: ////// main.dart:///////// import 'dart:isolate'; import 'package:android_alarm_manager/android_alarm_manager.dart'; import 'package:flutter/material.dart'; void printHello() { final DateTime now = DateTime.now(); final int isolateId = Isolate.current.hashCode; print("[$now] Hello,world! isolate=${isolateId} function='$printHello'"); } void main() async { final int helloAlarmID = 0; await AndroidAlarmManager.initialize(); runApp(MaterialApp(home: Application())); await AndroidAlarmManager.periodic(const Duration(minutes: 1),helloAlarmID,printHello); } class Application extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Container(),); } } ///////////////Application.java///////////////////// package io.flutter.plugins.androidalarmmanagerexample; import io.flutter.app.FlutterApplication; import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback; import io.flutter.plugins.GeneratedPluginRegistrant; public class Application extends FlutterApplication implements PluginRegistrantCallback { @Override public void onCreate() { super.onCreate(); AlarmService.setPluginRegistrant(this); } @Override public void registerWith(PluginRegistry registry) { GeneratedPluginRegistrant.registerWith(registry); } } ///// When I run this code it gives error in console as given below:////// E/flutter ( 6831): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(error,Attempt to invoke interface method 'void io.flutter.plugin.common.PluginRegistry$PluginRegistrantCallback.registerWith(io.flutter.plugin.common.PluginRegistry)' on a null object reference,null) E/flutter ( 6831): #0 JSONMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:149:7) E/flutter ( 6831): #1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:302:33) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #2 AndroidAlarmManager.initialize (package:android_alarm_manager/android_alarm_manager.dart:76:10) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #3 main (package:alarmdemo/main.dart:12:29) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #4 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:189:25) E/flutter ( 6831): #5 _rootRun (dart:async/zone.dart:1124:13) E/flutter ( 6831): #6 _CustomZone.run (dart:async/zone.dart:1021:19) E/flutter ( 6831): #7 _runZoned (dart:async/zone.dart:1516:10) E/flutter ( 6831): #8 runZoned (dart:async/zone.dart:1500:12) E/flutter ( 6831): #9 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:180:5) E/flutter ( 6831): #10 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19) E/flutter ( 6831): #11 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12) E/flutter ( 6831): E/flutter ( 6831): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method AlarmService.initialized on channel plugins.flutter.io/android_alarm_manager_background) E/flutter ( 6831): #0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #1 _alarmManagerCallbackDispatcher (package:android_alarm_manager/android_alarm_manager.dart:49:12) E/flutter ( 6831): #2 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:189:25) E/flutter ( 6831): #3 _rootRun (dart:async/zone.dart:1124:13) E/flutter ( 6831): #4 _CustomZone.run (dart:async/zone.dart:1021:19) E/flutter ( 6831): #5 _runZoned (dart:async/zone.dart:1516:10) E/flutter ( 6831): #6 runZoned (dart:async/zone.dart:1500:12) E/flutter ( 6831): #7 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:180:5) E/flutter ( 6831): #8 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19) E/flutter ( 6831): #9 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12) E/flutter ( 6831): 这是我更新的代码: /////////////main.dart////////// void printHello() { final DateTime now = new DateTime.now(); final int isolateId = Isolate.current.hashCode; print("[$now] Hello,world! isolate=${isolateId} function='$printHello'"); } void main() async { runApp(MaterialApp(home: Application())); } class Application extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Container( child: Center( child: RaisedButton( child: Text('Hello'),onPressed: () { runAlarm(); },),); } void runAlarm() { AndroidAlarmManager.oneShot( Duration(seconds: 10),printHello,wakeup: true,).then((val) => print(val)); } static void alarmTest() { print("test"); } } It does not give any Error in console but print two statements as below: E/AlarmService(11943): Fatal: failed to find callback I/AlarmService(11943): AlarmService has not yet started. I also initialize the alarm manager but it gives error in console: void runAlarm() { AndroidAlarmManager.periodic( Duration(seconds: 10),).then((val) => print(val)).catchError((e) { print(e); }); } Error: E/flutter ( 6831): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(error,null) E/flutter ( 6831): #0 JSONMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:149:7) E/flutter ( 6831): #1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:302:33) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #2 AndroidAlarmManager.initialize (package:android_alarm_manager/android_alarm_manager.dart:76:10) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #3 main (package:alarmdemo/main.dart:12:29) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #4 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:189:25) E/flutter ( 6831): #5 _rootRun (dart:async/zone.dart:1124:13) E/flutter ( 6831): #6 _CustomZone.run (dart:async/zone.dart:1021:19) E/flutter ( 6831): #7 _runZoned (dart:async/zone.dart:1516:10) E/flutter ( 6831): #8 runZoned (dart:async/zone.dart:1500:12) E/flutter ( 6831): #9 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:180:5) E/flutter ( 6831): #10 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19) E/flutter ( 6831): #11 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12) E/flutter ( 6831): E/flutter ( 6831): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method AlarmService.initialized on channel plugins.flutter.io/android_alarm_manager_background) E/flutter ( 6831): #0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7) E/flutter ( 6831): <asynchronous suspension> E/flutter ( 6831): #1 _alarmManagerCallbackDispatcher (package:android_alarm_manager/android_alarm_manager.dart:49:12) E/flutter ( 6831): #2 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:189:25) E/flutter ( 6831): #3 _rootRun (dart:async/zone.dart:1124:13) E/flutter ( 6831): #4 _CustomZone.run (dart:async/zone.dart:1021:19) E/flutter ( 6831): #5 _runZoned (dart:async/zone.dart:1516:10) E/flutter ( 6831): #6 runZoned (dart:async/zone.dart:1500:12) E/flutter ( 6831): #7 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:180:5) E/flutter ( 6831): #8 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19) E/flutter ( 6831): #9 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12) E/flutter ( 6831): 解决方法
您没有初始化警报对象和回调处理程序.
当应用程序开始运行时会发生什么: void main() async { runApp(MaterialApp(home: Application())); } 该应用程序只是为您运行并绘制UI.单击该按钮后,将调用以下方法: AndroidAlarmManager.oneShot( Duration(seconds: 10),) 此函数只是在指定的延迟时间后调度回调.这将失败,因为Callback处理程序未注册.意思是,在超时后,它找不到“任何人”负责运行’printHello’. 编辑: 您还需要覆盖一个方法来帮助插件在创建时注册. 创建一个如下所示的新文件: yourapprootfolder/android/app/src/main/java/io/flutter/plugins/androidalarmmanagerexample/Application.java 在.java文件中,放入: package io.flutter.plugins.androidalarmmanagerexample; import io.flutter.app.FlutterApplication; import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback; import io.flutter.plugins.GeneratedPluginRegistrant; import io.flutter.plugins.androidalarmmanager.AlarmService; public class Application extends FlutterApplication implements PluginRegistrantCallback { @Override public void onCreate() { super.onCreate(); AlarmService.setPluginRegistrant(this); } @Override public void registerWith(PluginRegistry registry) { GeneratedPluginRegistrant.registerWith(registry); } } 或在Kt文件中: package io.flutter.plugins.androidalarmmanagerexample; import io.flutter.app.FlutterApplication; import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback; import io.flutter.plugins.GeneratedPluginRegistrant; import io.flutter.plugins.androidalarmmanager.AlarmService; class Application : FlutterApplication(),PluginRegistrantCallback { override fun onCreate() { super.onCreate(); AlarmService.setPluginRegistrant(this); } override fun registerWith(registry: PluginRegistry) { GeneratedPluginRegistrant.registerWith(registry); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |