【问题标题】:Flutter workmanager plugin doesn't work with any other plugin when running taskFlutter workmanager 插件在运行任务时不能与任何其他插件一起使用
【发布时间】:2020-01-31 07:40:39
【问题描述】:

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

【问题讨论】:

  • 您是否有任何关于您正在使用的插件的补充信息和一些示例代码?
  • 你解决了吗?我也面临同样的问题。

标签: flutter plugins flutter-dependencies android-workmanager


【解决方案1】:

如果想使用 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"));
    }
}

新创建的CustomApplication类需要在android manifest文件的application标签中指定

<application
    android:name="packagename.CustomApplication"

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

【讨论】:

  • 能否请您提供更多关于该文件的放置位置、如何在 AndroidManifest.xml 中注册它以及其他必要步骤的详细信息。因为我一直卡住。
  • 我尝试按照您的说明进行操作,并将您使用的依赖项(例如 'shared_preferences: ^0.5.6+1')添加到我的 pubspec.yaml 中。我还在我的 app/build.gradle 文件中启用了 multiDex。但我不断收到错误/应用程序无法构建。我需要在 AndroidManifest.xml 中替换 "android:name="io.flutter.app.FlutterApplication" 对吗?我在哪里可以找到我的包名?(我的意思是我尝试了很多东西,但它仍然不起作用所以在某个地方我仍然做错了什么)。
  • 什么是构建错误。您可以在 CustomApplication 类文件的顶部找到包名称。
  • 我终于设法构建它。我把“package io.flutter.plugins;”在我的 CustomApplication.java 文件的顶部。和 AndroidManifest.xml 中的“android:name="io.flutter.plugins.CustomApplication”。我添加了“import com.lyokone.location.LocationPlugin;”和“LocationPlugin.registerWith(registry.registrarFor(”com.lyokone.location .LocationPlugin"));" 在 CustomApplication.java 中。但是......我仍然收到“MissingPluginException(No implementation found for method getLocation on channel lyokone/location)”错误。
  • 这对 cme​​ts IMO 来说太混乱了,我试图在这里更清楚地说明我的问题:stackoverflow.com/questions/60262425/…
猜你喜欢
  • 2019-04-17
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 2022-10-16
  • 2015-10-06
  • 1970-01-01
相关资源
最近更新 更多