Вызвать функцию Flutter из Android-части приложения

#android #flutter

#Android #flutter

Вопрос:

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

Когда приложение закрыто, оно продолжает работать в фоновом режиме как служба. В коде Android (на Java) мне нужно вызвать метод, который написан в части приложения Flutter.

Как я могу это сделать? Я нашел несколько сообщений, в которых упоминается MethodChannel, но я нашел только примеры, когда часть Flutter вызывает метод из родной (Android) части. Я хочу сделать наоборот.

Как я могу это сделать?

Спасибо.

Ответ №1:

в Flutter после создания экземпляра MethodChannel прикрепите обработчик MethodCallHandler следующим образом:

 _channel.setMethodCallHandler((call){
      print(call.method);
    });
  

И из вашего кода Android сделайте это:

 channel.invokeMethod("hello","any argument");
  

Однако она не будет работать, когда приложение было завершено, даже если служба все еще работает. Я протестировал ее.

Комментарии:

1. Есть ли какие-либо обходные пути для вызова функции flutter, когда приложение не открыто. Я хочу синхронизировать данные с сервером при подключении к Интернету. Я внес изменения в службу подключения к Интернету на стороне Android, но все методы синхронизации в настоящее время находятся в состоянии сбоя.

2. Откуда channel берется на стороне Android?

3. проверьте это

4. @KamleshKanazariya слишком поздно, но проверьте это

5. Извините, но этот код может работать только тогда, когда сторона Flutter «активирована», поскольку канал может быть запущен только тогда, когда приложение находится на переднем плане. Как вы сказали.

Ответ №2:

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

На Android он будет использовать WorkManager для планирования выборки данных и сохранения их в ROOM или Realm и т.д.

На iOS для планирования выборки данных и хранения в Core Data или Realm будет использоваться фоновое обновление приложения.

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