簡體   English   中英

是否可以在 flutter 中編寫一個應用程序,將數據發送到 android 中的另一個應用程序? 通過事件通道

[英]Is possible to have an app written in flutter that send data to another app in android? through EventChannels

你能解釋一下如何從 flutter 中編寫的應用程序 A 到 Android B 中編寫的應用程序進行通信嗎?是否可以為此目的使用 EventChannels? 這種通信是否可能是雙向的?

這里有一個例子(FLUTTER APP A):

import 'dart:async';

import 'package:flutter/services.dart';

class MyEventChannel {
  static const MethodChannel _channel =
      const MethodChannel('my_event_channel');

  static Future<String> get platformVersion async {
    final String version = await _channel.invokeMethod('getPlatformVersion');
    return version;
  }

  static Stream<String> get messageStream {
    return _channel.receiveBroadcastStream('message');
  }
}

void _sendMessage(String message) {
MyEventChannel.platformVersion.then((version) {
  if (version == 'Android') {
    MyEventChannel._channel.invokeMethod('sendMessage', message);
  }
});


}

Android APP B:

import android.content.Context;

import io.flutter.plugin.common.EventChannel;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;

public class MyEventChannel implements MethodCallHandler {
  private final Context context;

  private MyEventChannel(Context context) {
    this.context = context;
  }

  public static void registerWith(Registrar registrar) {
    final MethodChannel channel = new MethodChannel(registrar.messenger(), "my_event_channel");
    channel.setMethodCallHandler(new MyEventChannel(registrar.context()));

    final EventChannel eventChannel = new EventChannel(registrar.messenger(), "message");
    eventChannel.setStreamHandler(new EventChannel.StreamHandler() {
      @Override
      public void onListen(Object args, EventChannel.EventSink events) {
        // Handle messages received from Flutter
      }

      @Override
      public void onCancel(Object args) {
        // Handle cancel event
      }
    });
  }

  @Override
  public void onMethodCall(MethodCall call, Result result) {
    if (call.method.equals("getPlatformVersion")) {
      result.success("Android");
    } else if (call.method.equals("sendMessage")) {
      // Handle send message event
    } else {
      result.notImplemented();
    }
  }
}

我們可以讓 A 向 B 發送一些消息,而在其他情況下,B 向 A 發送一些消息? 這個機制是如何運作的。 關於此機制的文檔很差。

這是可能的。 但是,您需要先將需要發送的數據傳遞給 Flutter 應用程序,從 Flutter 代碼到 Android 本機代碼。 在此示例中,我將 flutter 應用程序作為App 1和 Android 應用程序應用App 2 我將在此應用程序中發送一個簡單的字符串。

App 1 Flutter -

static const AndroidComChannel = MethodChannel('message_channel'); //provide a channel name

Future<Null> sendDataToAndroid(String message) async{
//Passing the message to Native code
try{

  final String returnResult = await AndroidComChannel.invokeMethod('setMessage',{"Message_tag":message});
  print("$returnResult");

}on PlatformException catch (e){
  print(e);
   }
}

App 1 Android 本機代碼-

private static final String CHANNEL = "message_channel";

//Put this method inside onCreate() in MainActivity.
 @Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    super.configureFlutterEngine(flutterEngine);

    BinaryMessenger messenger = flutterEngine.getDartExecutor().getBinaryMessenger();

    new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
            .setMethodCallHandler(
                    (call, result) -> {
                     onMethodCall(call,result);
                    }
            );
}


private void onMethodCall(MethodCall call, MethodChannel.Result result){
    if(call.method.equals("setMessage")){
        String messageText = call.argument("Message_tag");
        //To do Implement here
        result.success("Message Received");
    }
    else{
        result.notImplemented();
    }
}

然后您可以使用本機代碼中的廣播接收器將數據從 App 1 發送到 App 2,如下所示

如果您收到從App 2App 1的內容,您可以像在上面的App 2中那樣使用 Broadcastreceiver 捕獲數據。 要將數據從本機代碼發送到 Flutter,請參閱視頻。 它演示了使用 EventChannels、MethodsChannels 從 Android Native 代碼調用 Flutter 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM