Flutter Workmanager插件在运行任务时无法与任何其他插件一起使用

时间:2019-10-02 02:33:10

标签: flutter plugins flutter-dependencies android-workmanager

初始化工作管理器并创建任何一个任务后,如果我们在任务执行过程中使用任何插件,将无法识别并抛出错误 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的实现)

1 个答案:

答案 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项目文件夹中,请检查以下屏幕截图。

enter image description here