Как позвонить в код Dart из услуги Android? - PullRequest
1 голос
/ 21 апреля 2020

У меня есть фоновая служба в Android, которую я вызываю в коде Flutter Dart, используя

  var methodChannel = MethodChannel("org.daytonsquareroots.near.backgroundlocation");
    methodChannel.invokeMethod("startBackgroundService", {
      "encKey" : encryptionKey
    });

Я использую библиотеку флаттера под названием simple rsa для шифрования местоположения. Тем не менее, Android, похоже, не имеет эквивалента. Итак, мой вопрос:

Могу ли я вызвать код Dart из моего Android кода, как я делаю с помощью метода Flutter MethodChannel, чтобы вызвать Android код?

I проверил эту проблему с github, но я не могу найти никаких реальных ответов.

1 Ответ

0 голосов
/ 21 апреля 2020
Follow the steps for enabling a plugin to execute headless Dart code as per https://medium.com/flutter-io/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124. This will involve writing a custom Application class with overrides and a service that have code where a PluginRegistrantCallback will registerWith the plugin registry of a background view (e.g. see here. This typically involves a "foreground" platform channel (for lack of a better description) and a background platform channel being established.
Add code on the Android platform side that will execute Dart code normally (i.e. the "non-headless" way) using the following channel.invokeMethod(...) and handle the call on the Flutter side. In the forked repository linked above, whenever a geofence is registered, the Android side will call channel.invokeMethod("register", null) (see here. This caught in the Flutter to call print the name of the method called, which would be "register" in this case (see here
Run the app and invoke code that execute the logic written in step 2 and notice the Flutter side will catch that a method got called from the platform side. You should method called: register in the debugger output
Now invoke logic that triggers headless execution
Invoke the logic that was done in step 2 again and the Flutter side doesn't get notification a method got called from the platform side i.e. method called: register isn't displayed again

Я заметил это, когда включал обезглавленное выполнение в свой собственный плагин для уведомлений. Похоже, что когда-то фоновая служба вызывает этот метод, который позволяет коду без заголовка запускать код, который опирается на другой плагин, вызов invokeMethod на канале платформы переднего плана больше не работает. Не уверен, что решение здесь или, возможно, есть проблема с самим движком

[✓] Flutter (Channel beta, v0.9.4, на Ma c OS X 10.14 18A391, локаль en-AU) • Flutter версии 0.9.4 в / Users / michaelbui / flutter • Версия редакции f37c235c32 (5 недель go), 2018-09-25 17:45:40 -0400 • Версия двигателя 74625aed32 • Версия Dart 2.1.0-dev .5.0.flutter-a2eb050044

[✓] Android toolchain - разработка для Android устройств (Android SDK 27.0.3) • Android SDK в / Users / michaelbui / Library / Android / sdk • Android Местоположение NDK не настроено (необязательно; полезно для поддержки собственного профилирования) • Платформа android -28, инструменты сборки 27.0.3 • ANDROID_HOME = / Users / michaelbui / Библиотека / Android / sdk • Java двоичный по адресу: / Applications / Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java версия среды выполнения OpenJDK (сборка 1.8.0_152-release-1136-b06) • все Android лицензии приняты.

[✓] iOS набор инструментов - разработка для iOS устройств ( Xcode 10.1) • Xcode в /Applications/Xcode.app/Contents/Developer • Xcode 10.1, сборка версии 10B61 • ios - развертывание 1.9.2 • CocoaPods версия 1.5.0

[✓] Android Studio (версия 3.2) • Android Studio at / Applications / Android Studio.app/Contents • Плагин Flutter версии 27.1.1 • Плагин Dart версии 173.4700 • Java версия среды выполнения OpenJDK (сборка 1.8.0_152-release- 1136-b06)

[✓] IntelliJ IDEA Community Edition (версия 2017.3.5) • IntelliJ в / Applications / IntelliJ IDEA CE.app • Плагин Flutter версии 23.0.2 • Плагин Dart версии 173.4700

[✓] VS Code (версия 1.28.2) • VS Code в / Applications / Visual Studio Code.app/Contents • Расширение флаттера версии 2.20.0

[✓] Подключенные устройства (1 доступно) • Pixel 2 XL • 711KPXV0530842 • android -arm64 • Android 9 (API 28)

• Проблем не найдено! проверить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...