繁体   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