当前位置: 首页 > news >正文

鸿蒙harmonyos next flutter通信之BasicMessageChannel获取app版本号

本文将通过BasicMessageChannel获取app版本号,以此来演练BasicMessageChannel用法。

  • 建立channel

flutter代码:

//建立通道
BasicMessageChannel basicMessageChannel = BasicMessageChannel("com.xmg.basicMessageChannel",StringCodec());

ohos代码:

//定义BasicMessageChannel
private basicMessageChannel: BasicMessageChannel<String> | null = null
//建立通道
this.basicMessageChannel = new BasicMessageChannel(flutterEngine.getDartExecutor(), "com.xmg.basicMessageChannel", StringCodec.INSTANCE)
  • 消息发送

        消息发送由flutter发送,flutter代码如下:

//发送消息给ohos,并接收ohos返回的消息
void _sendMessage(String sendMessage) async{ohosResultToFlutter = await basicMessageChannel.send(sendMessage);setState(() {});}
  • 消息处理

ohos接收消息,打印log,并且返回应用版本号给flutter

//消息处理,接收来自flutter的消息this.basicMessageChannel.setMessageHandler({onMessage(message,reply) {console.log("收到来自Flutter的消息: " + message)let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;bundleManager.getBundleInfoForSelf(bundleFlags, (err, data) => {// 获取应用的版本名(versionName)const versionName = data.versionName;reply.reply(versionName);})}})

log输出打印收到来自Flutter的消息: flutter发送消息到ohos

  • flutter展示版本号

  • 完整代码

flutter代码:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: const MyHomePage(title: 'BasicMessageChannel获取app版本号'),);}
}class MyHomePage extends StatefulWidget {const MyHomePage({super.key, required this.title});final String title;@overrideState<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {//建立通道BasicMessageChannel basicMessageChannel = BasicMessageChannel("com.xmg.basicMessageChannel",StringCodec());//展示ohos返回结果String ohosResultToFlutter = "";//发送消息给ohos,并接收ohos返回的消息void _sendMessage(String sendMessage) async{ohosResultToFlutter = await basicMessageChannel.send(sendMessage);setState(() {});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(widget.title),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[if (ohosResultToFlutter.isNotEmpty)Text("收到来自ohos的消息为:"+ohosResultToFlutter,),ElevatedButton(onPressed: () {_sendMessage("flutter发送消息到ohos");}, child: Text("发送消息"))],),),);}
}

ohos代码:

import {BasicMessageChannel,FlutterAbility, FlutterEngine, MethodCall, MethodChannel, MethodResult,StringCodec } from '@ohos/flutter_ohos';
import { GeneratedPluginRegistrant } from '../plugins/GeneratedPluginRegistrant';
import deviceInfo from '@ohos.deviceInfo'
import { bundleManager } from '@kit.AbilityKit'export default class EntryAbility extends FlutterAbility {private channel: MethodChannel | null = null//定义BasicMessageChannelprivate basicMessageChannel: BasicMessageChannel<String> | null = nullconfigureFlutterEngine(flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)GeneratedPluginRegistrant.registerWith(flutterEngine)this.channel = new MethodChannel(flutterEngine.dartExecutor.getBinaryMessenger(), 'com.xmg.test')this.channel.setMethodCallHandler({onMethodCall(call: MethodCall, result: MethodResult): void {switch (call.method) {case 'getDeviceInfo':result.success(deviceInfo.displayVersion);break;default:result.notImplementedbreak;}}});//建立通道this.basicMessageChannel = new BasicMessageChannel(flutterEngine.getDartExecutor(), "com.xmg.basicMessageChannel", StringCodec.INSTANCE)//消息处理,接收来自flutter的消息this.basicMessageChannel.setMessageHandler({onMessage(message,reply) {console.log("收到来自Flutter的消息: " + message)let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;bundleManager.getBundleInfoForSelf(bundleFlags, (err, data) => {// 获取应用的版本名(versionName)const versionName = data.versionName;reply.reply(versionName);})}})}
}
http://www.lryc.cn/news/452664.html

相关文章:

  • 【文件增量备份系统】MySQL百万量级数据量分页查询性能优化
  • 音视频入门基础:FLV专题(12)——FFmpeg源码中,解析DOUBLE类型的ScriptDataValue的实现
  • 【AI知识点】分层可导航小世界网络算法 HNSW(Hierarchical Navigable Small World)
  • ubuntu图形界面右上角网络图标找回解决办法
  • maven安装本地jar包到本地仓库
  • 1panel申请https/ssl证书自动续期
  • 【C语言】指针篇 | 万字笔记
  • 使用transformers调用owlv2实现开放目标检测
  • 大数据技术:Hadoop、Spark与Flink的框架演进
  • Spring Boot框架下的新闻推荐技术
  • 相亲交友系统的社会影响:家庭结构的变化
  • C++ 内存池(Memory Pool)详解
  • css三角形:css画箭头向下的三角形
  • CSS属性 - animation
  • 昇思MindSpore进阶教程--在ResNet-50网络上应用二阶优化实践(下)
  • 基于大数据的Python+Django电影票房数据可视化分析系统设计与实现
  • 实景三维技术对光伏产业的发展具有哪些优势?
  • 四非人的保研之路,2024(2025届)四非计算机的保研经验分享(西南交通、苏大nlp、西电、北邮、山软、山计、电科、厦大等)
  • UE5.4.3 录屏回放系统ReplaySystem蓝图版
  • ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!
  • 9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解
  • 【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。
  • Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world!
  • Spring框架使用Api接口实现AOP的切面编程、两种方式的程序示例以及Java各数据类型及基本数据类型的默认值/最大值/最小值列表
  • 【达梦数据库】尽可能 disql 的使用效果与异构数据库一致
  • 【研1深度学习】《神经网络和深度学习》阅读笔记(记录中......
  • 十一不停歇-学习ROS2第一天 (10.2 10:45)
  • Java高效编程(14):考虑实现 `Comparable
  • 华为昇腾CANN训练营2024第二季--Ascend C算子开发能力认证(中级)题目和经验分享
  • 实战OpenCV之形态学操作