flutter - Flutter workmanager 插件在运行任务时不能与任何其他插件一起使用
问题描述
在初始化工作管理器并创建任一任务后,如果我们在任务执行中使用任何插件,则无法识别它并抛出如下错误 MissingPluginException(在通道 lyokone/location 上找不到方法 getLocation 的实现)
实际代码:
Workmanager.executeTask((task, inputData) async {
Location locationObject = Location();
locationObject.getLocation();
print(locationObject);
return Future.value(true);
}
基本上,工作管理器任务中使用的任何其他插件似乎都无法识别。
我错过了什么,我需要重新注册我的所有插件吗?
I/flutter (16120): Location permission has error
I/flutter (16120): MissingPluginException(No implementation found for method serviceEnabled on channel lyokone/location)
解决方案
如果想使用 WorkManager executeTask 中的其他插件,那么;需要创建自定义应用程序类,并且需要注册其他插件。如果 WorkManager 插件本身需要在执行任务中使用,该插件也需要注册。此外,这个新创建的自定义应用程序需要在 AndroidManifest.xml 文件中指定。插件的问题链接中提到了这一点,因为它不能完全从插件本身处理。
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;
import io.flutter.plugins.androidalarmmanager.AndroidAlarmManagerPlugin;
import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin;
import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin;
import io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin;
import be.tramckrijte.workmanager.WorkmanagerPlugin;
public class CustomApplication extends FlutterApplication implements PluginRegistry.PluginRegistrantCallback {
@Override
public void onCreate() {
super.onCreate();
WorkmanagerPlugin.setPluginRegistrantCallback(this);
}
@Override
public void registerWith(PluginRegistry registry) {
// GeneratedPluginRegistrant.registerWith(registry);
//add AndroidAlarmManagerPlugin plugin register if you work with arlarm
AndroidAlarmManagerPlugin.registerWith(registry.registrarFor("io.flutter.plugins.androidalarmmanager.AndroidAlarmManagerPlugin"));
//add SharedPreferencesPlugin plugin register if you work with share preferences
SharedPreferencesPlugin.registerWith(registry.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
// something else...
FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
CloudFirestorePlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin"));
WorkmanagerPlugin.registerWith(registry.registrarFor("be.tramckrijte.workmanager.WorkmanagerPlugin"));
}
}
新创建的CustomApplication类需要在android manifest文件的application标签中指定
<application
android:name="packagename.CustomApplication"
Android 特定文件位于 Android 项目文件夹中,请查看以下屏幕截图。
推荐阅读
- swift - 如何解决:“无法将 'SelfieListViewController' 类型的值分配给类型 '(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?'”
- java - 由于属性文件位置类型,应用程序或集成测试 Spring 上下文创建失败
- .net - 当窗体没有焦点时激活 ContextMenuStrip
- actionscript-3 - 问题:网站和 Flash 加载我的 SWF 客户端的旧版本
- javascript - ajax 响应和 html 无法正常工作
- amazon-rds - AWS Neptune 读取器和写入器必须是相同的实例类型吗?
- visual-studio-code - 为什么 VS Code 终端在初始提示中添加 cr-lf 字符?
- pandas - 在循环熊猫中添加列
- git - git:你怎么能在 git-status 中使用 `R`、`C` 和 `U` 标志
- node.js - 我怎么打电话
Firebase 云函数中的 .listCollections()?