如何从 android_alarm_manager 创建的隔离中调用 MethodChannel?

How to call MethodChannel from an isolate created by android_alarm_manager?

我尝试安排后台服务。为此,我使用了 https://pub.dev/packages/android_alarm_manager。效果不错。

对于我的示例,我尝试从我的隔离(android_alarm_manager 的回调)中获取电池电量,遵循 flutter 教程:https://flutter.dev/docs/development/platform-integration/platform-channels?tab=android-channel-java-tab.

如果我手动调用我的回调它会起作用(所以我很好地完成了 Android 部分)。如果 android_alarm_manager 调用它,我会出现以下错误:

Unhandled Exception: MissingPluginException(No implementation found for method getBatteryLevel on channel net.example.com/battery)

这很奇怪,因为从我使用 https://pub.dev/packages/flutter_downloader 下载文件的另一个隔离区,这个插件使用 MethodChannel...

这是我的 android_alarm_manager 代码:

import 'package:flutter/services.dart';

class AndroidManagerCallBack {
  static Future<void> main() async {
    _AndroidManagerCallBack test = _AndroidManagerCallBack();
    await test.getBatteryLevel();
  }
}

class _AndroidManagerCallBack {
  static const platform = const MethodChannel('net.example.com/battery');

  Future<void> getBatteryLevel() async {
    String batteryLevel;
    try {
      final int result = await platform.invokeMethod('getBatteryLevel');
      batteryLevel = 'Battery level at $result % .';
    } on PlatformException catch (e) {
      batteryLevel = "Failed to get battery level: '${e.message}'.";
    }
    print(batteryLevel);
  }
}

我只是像这样调用回调:

AndroidAlarmManager.periodic(
      Duration(seconds: 20),
      0,
      AndroidManagerCallBack.main(),
      rescheduleOnReboot: true,
      wakeup: false,
    );

在 android_alarm_manager 的回调中,我可以调用使用某些 MethodChannel 的插件,但是当我尝试使用我的 MethodChannel 时,出现错误...

有人可以指导我:) ?

似乎无法通过isolate直接调用MethodChannel

但是,通过创建一个插件,我可以实现我想要的。所以解决方案是创建一个插件 :) !