小编Gho*_*ian的帖子

如何从 Workmanager 任务调用方法通道

我在 Android 构建的 MainActivity 类中注册了一个方法通道,当从前台应用程序调用时该方法可以正常工作。

我想从 Workmanager 在后台运行的任务中调用此方法通道,但每次都会收到 MissingPluginException。

我猜这不起作用,因为后台任务不会初始化 MainActivity,但我似乎找不到有关如何在工作管理器可以调用它们的地方注册通道的任何信息。

我的(简化的)设置如下:lib/main.dart:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
  Workmanager().registerPeriodicTask('uniquename', 'taskName',
    frequency: const Duration(minutes: 15),
    constraints: Constraints(networkType: NetworkType.connected));

  runApp(const MyApp());
}

void callbackDispatcher() {
  Workmanager().executeTask((taskName, inputData) async {
    bool result = await DeviceInfoModel().getDeviceInfo();
    return Future.value(result);
  });
}
Run Code Online (Sandbox Code Playgroud)

lib/device_info.dart:

class DeviceInfoModel extends ChangeNotifier {
  static const platform = MethodChannel('deviceInfo');

  Future<void> getDeviceInfo() async {
    final int result = await platform.invokeMethod('getBatteryLevel');
    // And other similar calls to other methods
  }
}
Run Code Online (Sandbox Code Playgroud)

android/app/src/main/kotlin/nl/myapp/MainActivity.kt: …

android flutter flutter-method-channel flutter-workmanager

5
推荐指数
1
解决办法
501
查看次数