![](/img/trans.png)
[英]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.