初始化工作管理器并创建任何一个任务后,如果我们在任务执行过程中使用任何插件,将无法识别并抛出错误 MissingPluginException(在通道lyokone / location上找不到方法getLocation的实现)
实际代码: Workmanager.executeTask((task,inputData)async {Location locationObject = Location(); locationObject.getLocation(); print(locationObject); return Future.value(true);}
基本上无法识别在工作管理器任务中使用的任何其他插件。
我缺少什么,我需要重新注册所有插件吗?
I / flutter(16120):位置权限有误 I / flutter(16120):MissingPluginException(在通道lyokone /位置上未找到方法serviceEnabled的实现)
答案 0 :(得分:2)
如果要从WorkManager的executeTask内部使用其他插件,则;需要创建自定义应用程序类,并需要注册其他插件。如果需要在执行任务中使用WorkManager插件本身,则该插件也需要注册。另外,还需要在AndroidManifest.xml文件中指定此新创建的自定义应用程序。 插件的issues link中提到了此问题,因为无法完全通过插件本身来处理。
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"));
}
}
需要在android清单文件中的application标签中指定新创建的CustomApplication类
<application
android:name="packagename.CustomApplication"
Android专用文件位于Android项目文件夹中,请检查以下屏幕截图。