[英]What happens to old app data written in another language when you release a new version of the App written in Flutter?
[英]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 2
到App 1
的内容,您可以像在上面的App 2
中那样使用 Broadcastreceiver 捕获数据。 要将数据从本机代码发送到 Flutter,请参阅此视频。 它演示了使用 EventChannels、MethodsChannels 从 Android Native 代码调用 Flutter 方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.