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了,前阵子面试了一家不大不小的公司.公司不大,面试官架子还不小,一副目中无人高高在上的样子,搞得好像我一万个想进他们公司.我进不了他们公司我全家都得喝西北风一样.搞得我是 ...
最新文章
- Win7 SP1语言包微软官方下载地址及使用方法 2
- monty python dead parrot-BBC十大英剧神作出炉!
- 神策数据曹犟:神策数据产品矩阵与技术体系
- java重定向代码_Java程序员经典面试题集大全 (三十四)
- 安装CUDA时出现黑屏的现象解决办法
- php调用拼多多的接口
- python-31:然而我发现结果并不是我想要的
- java hashtable 修改_Java Hashtable computeIfAbsent()用法及代码示例
- 汽车+辐射测试软件,汽车EMC辐射发射的一些所见所闻和思考
- idea weblogic 部署慢_IDEA+weblogic部署运行项目
- PHP自学---黑马程序员笔记【持续更新】
- 使用BadBoy录制JMeter脚本
- Matlab利用plot函数绘制散点图
- Android Amazon S3 功能接入
- 如何在Anaconda创建新环境
- 个人用户如何保证企业邮箱安全?【网易企业邮箱】
- 基于XC2V1000型FPGA的FIR抽取滤波器的设计
- 点云编码是计算机视觉吗,本周新出开源计算机视觉代码汇总(含图像超分辨、视频目标分割、行人重识别、点云识别等)...
- cdr vb 动态定义数组 遍历对象里面包含群组的
- 计算机图形学--全局光照(3D 空间:LPV,VXGI;屏幕空间:SSAO)
热门文章
- php的排序函数,php 数组排序函数,
- 使用AutoEncoder进行异常检测
- MacOS配置Python环境
- LeetCode 53. 最大子数组和【贪心算法、动态规划】
- Hyperledger Fabric项目搭建区块链浏览器Hyperledger-blockchain-explorer
- 初识网络基础《网络七层模型详解》
- 微信小程序php返回数组,微信小程序 数组(增,删,改,查)等操作实例详解...
- 亚商投资顾问早餐FM/0314AI助力数字人发展
- 基于Arduino制作的32灯立体旋转LED
- Android扫描银行卡获取银行卡号