Flutter 与 原生交互(Android),关于Android开发的面试经验总结
- 接收
*/
void receiveMessage(){
messageChannel.setMessageHandler((message) async{
print(message);
return “is ok”;
});
}
MethodChannel
=============
flutter 调用 原生
1.实现插件
public class FlutterPluginTest implements MethodChannel.MethodCallHandler {
private static final String TAG = “FlutterPluginTest”;
/**
- 插件标识
*/
public static String CHANNEL = “com.mmd.flutterapp/plugin”;
private static String ACTION_LOG = “log”;
private static String LOG_ARGUMENT = “data”;
static MethodChannel channel;
public static void registerWith(PluginRegistry.Registrar registrar) {
channel = new MethodChannel(registrar.messenger(), CHANNEL);
FlutterPluginTest instance = new FlutterPluginTest();
channel.setMethodCallHandler(instance);
}
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
/**
- 通过 method 判断调用方法
*/
if (methodCall.method.equals(ACTION_LOG)) {
/**
- 解析参数
*/
String text = methodCall.argument(LOG_ARGUMENT);
if (TextUtils.isEmpty(text)) {
/**
- 错误返回
*/
result.error(“Data is Null”,null,null);
}else {
Log.d(TAG, "onMethodCall: "+text);
/**
- 成功返回
*/
result.success(“is ok”);
}
}else {
result.notImplemented();
}
}
}
2.注册插件
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
- 注册插件
*/
FlutterPluginTest.registerWith(this.registrarFor(FlutterPluginTest.CHANNEL));
}
}
3.Flutter 端调用
import ‘package:flutter/services.dart’;
/**
- 名称要和Java端一致
*/
const channelName = “com.mmd.flutterapp/plugin”;
const methodName = “log”;
const MethodChannel channel = MethodChannel(ch
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
annelName);
Future _testLog() async{
Map<String,String> map = {“data”:“Flutter Hello !”};
String result = await channel.invokeMethod(methodName,map);
print(result);
}
EventChannel
============
原生发送数据到Flutter
1.实现插件
public class FlutterPluginEventTest implements EventChannel.StreamHandler {
private static final String TAG = “FlutterPluginEventTest”;
public static String CHANNEL = “com.mmd.flutterapp/plugin”;
static EventChannel channel;
public static void registerWith(PluginRegistry.Registrar registrar) {
channel = new EventChannel(registrar.messenger(), CHANNEL);
FlutterPluginEventTest flutterPluginEventTest = new FlutterPluginEventTest();
channel.setStreamHandler(flutterPluginEventTest);
}
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
eventSink.success(System.currentTimeMillis());
} catch (InterruptedException e) {
eventSink.error(“error”,“error”,e.getMessage());
}
}
}
}).start();
}
@Override
public void onCancel(Object o) {
Log.i(TAG, "onCancel: "+o);
}
}
2.注册插件
FlutterPluginEventTest.registerWith(this.registrarFor(FlutterPluginEventTest.CHANNEL));
3.Flutter 接收
import ‘dart:async’;
import ‘package:flutter/services.dart’;
/**
- 名称要和Java端一致
*/
const channelName = “com.mmd.flutterapp/plugin”;
const EventChannel eventChannel = EventChannel(channelName);
StreamSubscription _subcription = null;
void init(void onEvent(String value),Function onError){
if(_subcription == null) {
_subcription = eventChannel.receiveBroadcastStream().listen(onEvent,onError: onError);
}
}
void dispose(){
Flutter 与 原生交互(Android),关于Android开发的面试经验总结相关推荐
- flutter和原生交互
一.Flutter中使用Android Studio打开原生文件 选中Android目录--右键--选中flutter---Open for Editing in Android Studio 问题1 ...
- 阿衰java免费版_flutter plugin之路:flutter与原生交互传值OC/java版(一)
说在前头:flutter虽然很牛掰,但是目前很多功能或者插件的实现其实还是需要通过原生来实现,然后通过flutter和原生的交互传值实现数据的交换. -本篇是flutter调用原生方法,然后原生执行完 ...
- 从100场腾讯面试中,抽出来经典面试题,腾讯技术职业等级丨C++后端开发丨Linux服务器开发丨面试经验丨面试总结
从100场腾讯面试中,抽出来经典面试题,腾讯技术职业等级 视频讲解如下,点击观看: 从100场腾讯面试中,抽出来经典面试题,腾讯技术职业等级丨C++后端开发丨Linux服务器开发丨面试经验丨面试总结丨 ...
- 包红b2c模块 flutter与原生交互
一.flutter提供的FlutterMethodChanel与原生(ios&android)进行交换 flutter与原生交互图: ios注册flutter调用通道 //oc 注册flutt ...
- 直接上干货!关于Android开发的面试经验总结,含小米、腾讯、阿里
缘起 经过近十年的发展,Android技术优化日新月异,如今Android 10.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS.到了各大厂商手里,改源码.自定义系统, ...
- 膜拜大佬!关于Android开发的面试经验总结,面试必备
优秀的战士需要出色的剑才能战斗.同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率.在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生 ...
- 3年Android开发工程师面试经验分享,先收藏了
前言 程序员这个行业,日新月异,技术体系更新速度快,新技术新框架层出不穷,所有的技术都像是一个无底洞,当你学得越多就会发现不懂的越多,不懂的越多,需要学习的就更多. 因此,一旦选择了这个行业,就意味着 ...
- 膜拜大佬!关于Android开发的面试经验总结,面试总结
优秀的战士需要出色的剑才能战斗.同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率.在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生 ...
- android面试宝典铁道出版社,关于Android开发的面试经验总结
起由 搞了7年多Android了,前阵子面试了一家不大不小的公司.公司不大,面试官架子还不小,一副目中无人高高在上的样子,搞得好像我一万个想进他们公司.我进不了他们公司我全家都得喝西北风一样.搞得我是 ...
最新文章
- Codeforces #449 div2 C题
- 苹果向小型企业推出新付费订阅产品“Business Essentials”
- 企业微信接收消息服务器配置php,微信企业号配置及在公众号里获取用户信息
- idea改类名快捷键_IDEA使用之快捷键(default设置)
- Openlayers3中如何优雅的表示等值面
- 13讲项目实战内页滚动图效果实现
- 有个exe文件删不掉怎么办
- ASO选词估量该怎么做?aso怎么选词
- java将时间撮转成日期,Java将时间戳转换为日期
- 区块链的概念定义是什么
- 用Hadoop分析金庸人物关系网-实验报告
- 我在工作中是如何使用【Linux】的
- Intel 内部指令---AVX编程基础
- RTOS与linux区别
- 网络爬虫学习1 - 使用 requests.get(url) 抓取网页
- .net借助LumiSoft.dll获取邮件内容和附件
- 高数等价无穷小替换公式
- 搜狗微信下线了怎么获取公众号文章?手把手教你最新获取方式
- c语言匹配英文,正则英语_正则表达式怎么匹配英文句子_淘题吧
- tar打包保留文件的扩展属性
热门文章
- tomcat一键启停shell脚本
- Zookeeper读写性能测试
- 【转】CAN总线的终端电阻选择
- 【华为OD机试真题】密室逃生游戏(C++javapython)100%通过率 超详细代码注释 代码优化
- 使用QQ2013时连接Android物理设备Eclipse发现不了
- Linux企业运维人员最常用150个命令汇总
- 传输阻抗的原理与测量 --特性阻抗的定义
- (C语言)从键盘输入输入一个不大于5位的整数,判断位数,并逆序输出
- spring cloud学习,转载自纯洁的微笑
- Oracle 中SDE.ST_GEOMETRY类型的shape数据如何查看坐标点信息(WKT字符串)?