Flutter工作管理插件在运行任务时无法与其他插件配合使用。

8

在初始化工作管理器并创建任务之后,如果我们在任务执行中使用任何插件,它将无法识别并报错,如下所示:
MissingPluginException(No implementation found for method getLocation on channel lyokone/location)

实际代码:

Workmanager.executeTask((task, inputData) async {
  Location locationObject = Location(); 
  locationObject.getLocation(); 
  print(locationObject); 
  return Future.value(true); 
}

在WorkManager任务内部使用的任何其他插件似乎都无法识别。

我错过了什么?我需要重新注册所有插件吗?

I/flutter (16120): 位置权限出错

I/flutter (16120): MissingPluginException(lyokone/location通道上找不到方法serviceEnabled的实现)


你是否有关于你正在使用的插件的任何其他信息和一些示例代码? - pfmaggi
2
你解决了吗?我也遇到了相同的问题。 - Blehi
1个回答

2
如果想要在WorkManager executeTask中使用其他插件,则需要创建自定义应用程序类并注册其他插件。如果需要在execute task内部使用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清单文件中的应用程序标签中指定。
<application
    android:name="packagename.CustomApplication"

Android特定文件位于Android项目文件夹中,请查看下面的屏幕截图。

enter image description here


1
您能否提供更多关于在何处放置此文件、如何在AndroidManifest.xml中注册以及其他必要步骤的细节,因为我一直卡在这里。 - Tom O
我尝试按照您的指示操作,并在我的pubspec.yaml文件中添加了您使用的依赖项,例如'shared_preferences: ^0.5.6+1'。我还在我的app/build.gradle文件中启用了multiDex。但是我仍然遇到错误/应用程序无法构建。我需要替换AndroidManifest.xml中的“android:name =”io.flutter.app.FlutterApplication“,对吗?我在哪里可以找到我的包名?(我的意思是,我尝试了很多东西,但它仍然无法正常工作,所以我肯定还是做错了某些事情)。 - Tom O
构建错误是什么?包名称可以在CustomApplication类文件顶部找到。 - Sathyajith
我终于成功构建了它。我在CustomApplication.java文件的顶部添加了“package io.flutter.plugins;”。在AndroidManifest.xml中添加了“android:name="io.flutter.plugins.CustomApplication"”。并且我在CustomApplication.java中添加了“import com.lyokone.location.LocationPlugin;”和“LocationPlugin.registerWith(registry.registrarFor("com.lyokone.location.LocationPlugin"));"。然而...我仍然遇到了“MissingPluginException(No implementation found for method getLocation on channel lyokone/location)”错误。 - Tom O
在我看来,这里的评论已经变得太混乱了。我已经尝试在这里更清晰地陈述我的问题:https://dev59.com/3ek5XIcBkEYKwwoY3tcY - Tom O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接