成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

flutter通信,flutterin

Flutter與原生通信概述

flutter與原生通信主要有三種方式:MethodChannel、EventChannel、BasicMessageChannel,這三種方式均各有適用的場景:MethodChannel用于native與flutter的方法調用,EventChannel用于native單向的向flutter發(fā)送廣播消息,BasicMessageChannel用于native與flutter之間的消息互發(fā)。

創(chuàng)新互聯(lián)公司主營赤壁網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都App定制開發(fā),赤壁h5成都微信小程序搭建,赤壁網(wǎng)站營銷推廣歡迎赤壁等地區(qū)企業(yè)咨詢

MethodChannel用于雙方之間的方法互調,使用步驟是:

1.創(chuàng)建一個MethodChannel對象,傳入MethodChannel名稱。

2.使用setMethodHandle對對方調用自己的方法進行監(jiān)聽,通過回調中的MethodCall對象方法名判斷、獲取方法參數(shù),并且返回調用結果。

3.使用invokeMethod來調用對方的方法,可傳入方法名,方法參數(shù),以及監(jiān)聽對方的回調結果。

以下是示例:

需要注意的是,MethodChannel的名稱需要雙方保持一致,否則就不是同一個MethodChannel了。另外這里的方法調用并不是像Java里面反射那樣去先找到class示例對象再解析到相應的方法,而是將雙方互發(fā)的消息包裝成了MethodCall對象,拿到這個對象后通過MethodCall里面的方法名去判斷要做什么操作,并不是直接就調用了自身(native或flutter)相對應的方法。具體要做什么操作、調用什么方法還是得自己去調用和實現(xiàn)。

EventChannel適用于native向flutter發(fā)送廣播消息,只是單向的消息發(fā)送,native發(fā),flutter收,返過來flutter并不能向native發(fā)送消息。例如native可將定位數(shù)據(jù)不斷的報給flutter,或者錄像數(shù)據(jù)等等,所有基于原生能力產生的數(shù)據(jù)都可以通過EventChannel進行發(fā)送。

步驟:

1.創(chuàng)建一個EventChannel對象,傳入EventChannel名稱。

2.flutter端調用receiveBroadcastStream進行廣播消息注冊,傳入arguments參數(shù)即為廣播名稱,此參數(shù)是告訴native端你要接受的廣播類型,判別是什么廣播發(fā)送的數(shù)據(jù)。

2.native調用setStreamHandler方法進行廣播消息監(jiān)聽,onListen回調里會有一個arguments參數(shù),這里及為flutter注冊的廣播類型,若flutter端沒有注冊,則native端不會收到這個回調,也就無法進行消息發(fā)送。收到flutter端的廣播注冊后,根據(jù)arguments可判斷廣播類型,然后根據(jù)EventChannel.EventSink來進行消息發(fā)送,EventSink.success()即可將消息發(fā)送給flutter端。

3.flutter進行廣播注冊會返回一個streamSubscription類型的對象,該對象可以進行消息的停止,native可在onCancel回調里面收到。

示例如下:

BasicMessageChannel就是比較常用的消息互發(fā),使用步驟如下:

1.創(chuàng)建BasicMessageChannel對象,傳入BasicMessageChannel名稱。還需傳入編解碼方式(可以自己實現(xiàn)),系統(tǒng)提供了一些列的編解碼方式,后續(xù)會介紹到。

2.使用setMessageHandler方法進行消息監(jiān)聽,也可進行回復。

3.使用send方法進行消息發(fā)送。

無論哪種方式的消息傳遞,最終都是將自定義數(shù)據(jù)轉化為二進制數(shù)據(jù)進行傳遞,flutter提供的編解碼方式分為MethodCodec和MessageCodec兩種,EventChannel和MethodChannel使用的就是MethodCodec,BasicMessageChannel使用的是MessageCodec。MethodCodec其實就是在MessageCodec的基礎上將數(shù)據(jù)包裝了一下,使其轉化為MethodCall對象方便使用。

MethodCodec源碼:

MethodCodec提供了兩種方式:JSONMethodCodec和StandardMethodCodec,前一種就是JSON和MethodCall對象之間的互轉,后一種則是根據(jù)傳入的數(shù)據(jù)基本類型(String,Integer等)來進行互轉。

MessageCodec則提供了四種方式,如下圖,具體就不詳細講述了,看看名字就知道是怎么回事,可以直接去看源碼。最常用和默認的就是StandardMessageCodec方式。

從上面的使用方式可以看出,每一種Channel在創(chuàng)建的時候都需要傳遞一個BinaryMessenger,這個接口可以在FlutterEngine里面拿到,因此需要在FlutterActivity里面實現(xiàn)configFlutterEngine方法里面重寫這個方法。FlutterActivity在attach FlutterEngine之后就會調用這個configFlutterEngine方法,通過flutterEngine.getPlugins().add(FlutterPlugin)方法可以FlutterPlugin的回調方法里進行數(shù)據(jù)的初始化和銷毀工作。如下圖

這個回調方法里的FlutterPluginBinding提供了一些我們可能會用到的對象,如下:

Flutter與Android通信的三種方式

一、 MethodChannel

主要是flutter端調用android方法。flutter調取android方法,也可以android主動跟flutter通信,但是這個只能是傳遞數(shù)據(jù),不是調方法。MethodChannel的flutter調取android方法,我之前寫過,可以查看如下鏈接,

Android主動跟flutter通信,如下

二、 BasicMessageChannel

它是可以雙端通信的,flutter端可以給Android發(fā)送消息,Android也可以給Flutter發(fā)送消息。

三、EventChannel

只能是原生發(fā)送消息給Flutter端,例如監(jiān)聽手機電量變化,網(wǎng)絡變化,傳感器等。

打印結果如下:

總結一下:

MethodChannel 用于傳遞方法調用(method invocation),是flutter調取原生方法的,也可以原生主動傳遞數(shù)據(jù)給Flutter。

BasicMessageChannel 用于傳遞字符串和半結構化的信息。是兩個端相互發(fā)送數(shù)據(jù),接收數(shù)據(jù)的。

EventChannel 用于數(shù)據(jù)流(event streams)的通信。通長用于Nativie向flutter的通信,如:手機電量變化,網(wǎng)絡連接變化,陀螺儀,傳感器等;

tip:多種類型的通道混用可能會出現(xiàn)報錯問題。

flutter udp通信 16進制 byte數(shù)據(jù)一些操作

ps:使用flutter開發(fā)app 與 設備硬件交互 要求使用udp通信?

flutter UPD通信 ?基于這大神的文章下進行修改的。

數(shù)據(jù)結構

flutter 數(shù)據(jù)結構中

Uint8List是一個固定長度的8位無符號整數(shù)列表。(感覺跟byte類型差不多 都是占用1字節(jié) 0-255)

1. Listint ?或 Uint8List轉 int ? 要注意list的高低位

int byteToNum(Listint list) {

Uint8List resultList = Uint8List.fromList(list);

ByteData byteData = ByteData.view(resultList.buffer);

print(byteData);

return byteData.getInt16(0);

}

2.將字符串轉成listint 并指定長度(字符串占用的字節(jié))

3. ?10進制int 轉 16 進制listint。

其實這里應該是uint8list的。1字節(jié)。length 字節(jié)長度

設備正常使用 ? 有問題的方面。歡迎大家指出?

網(wǎng)站名稱:flutter通信,flutterin
標題來源:http://jinyejixie.com/article40/dssopeo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內鏈云服務器、定制網(wǎng)站、手機網(wǎng)站建設、網(wǎng)站營銷、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設
阜城县| 建湖县| 金平| 保德县| 昔阳县| 柳河县| 揭东县| 塔城市| 镇沅| 克拉玛依市| 嘉定区| 靖安县| 陆丰市| 陆丰市| 双鸭山市| 扶绥县| 淮安市| 大厂| 日照市| 盐山县| 监利县| 凤阳县| 梓潼县| 搜索| 桂东县| 静宁县| 临汾市| 金寨县| 石门县| 辰溪县| 汉川市| 安岳县| 浦县| 连平县| 石狮市| 株洲市| 鄂州市| 南川市| 会同县| 宾阳县| 德惠市|