Unity實現Android源生平臺藍芽BLE4.0資料傳輸(三)
上篇我說到如何開啟系統藍芽 掃描裝置 連線 具體連線我們在這裡說
AndroidJavaObject wfzBluetoothGattCallback = new AndroidJavaObject("com.wfz.bletounity.WFZBluetoothGattCallback”);//連線的事件回撥物件 BluetoothGattCallback bluetoothGattCallback = new BluetoothGattCallback();//unity事件回撥介面的實現類 //特徵值資料變化的事件委託 bluetoothGattCallback.onCharacteristicChangedDelegate = (g, c) => { var data = c.Call<byte[]>("getValue"); string d = ""; for (int i = 0; i < data.Length; i++) { d += data[i]; } Debug.Log(d); }; //裝置連線狀態變化的事件委託 bluetoothGattCallback.onConnectionStateChangeDelegate = (g, s, n) => { switch (n) { case 0: Debug.Log("斷開連線"); break; case 1: Debug.Log("連線中"); break; case 2: Debug.Log("連線成功"); Debug.Log("獲取到gatt物件"+g.Call<AndroidJavaObject>("getDevice").Call<string>("getName")); var isFind= g.Call<bool>("discoverServices"); break; case 3: Debug.Log("斷開中"); break; default: break; } }; //發現裝置服務事件委託 bluetoothGattCallback.onServicesDiscoveredDelegate = (g, c) => { var gattServices = g.Call<AndroidJavaObject>("getServices"); Debug.Log("發現新服務..." + gattServices.Get<int>("size")); if (gattCharacteristic==null) { gattCharacteristic = GetCharacteristic(GetService(g, serviceID), characteristicID); NotificationData(g, gattCharacteristic, descriptorID); } };
回撥物件寫好了我們就可以連線裝置了
wfzBluetoothGattCallback.Call("AddUnityCallback", bluetoothGattCallback);//把實現的介面新增到回撥物件
buetoothGatt = device.Call<AndroidJavaObject>("connectGatt", AndroidCall.unityActivity, true, wfzBluetoothGattCallback);//開始連線
下面是獲取服務 特徵值的函式實現
/// <summary> /// Gets the service. /// </summary> /// <returns>The service.</returns> /// <param name="gatt">Gatt.</param> /// <param name="uuid">UUID.</param> public AndroidJavaObject GetService(AndroidJavaObject gatt, string uuid) { return gatt.Call<AndroidJavaObject>("getService", ToAndroidUUID(uuid)); } /// <summary> /// Gets the characteristic. /// </summary> /// <returns>The characteristic.</returns> /// <param name="Service">Service.</param> /// <param name="uuid">UUID.</param> public AndroidJavaObject GetCharacteristic(AndroidJavaObject Service,string uuid) { return Service.Call<AndroidJavaObject>("getCharacteristic", ToAndroidUUID(uuid)); }
開啟特徵值的通知
開啟通知之後 就可以在onCharacteristicChanged 事件裡面獲取到傳送過來的資料了/// <summary> /// Notifications the data. /// </summary> /// <param name="gatt">Gatt.</param> /// <param name="characteristic">Characteristic.</param> /// <param name="uuid">UUID.</param> public void NotificationData(AndroidJavaObject gatt,AndroidJavaObject characteristic,string uuid) { var b = gatt.Call<bool>("setCharacteristicNotification", characteristic, true); if (b) { var bluetoothGattDescriptor = new AndroidJavaClass("android.bluetooth.BluetoothGattDescriptor"); var descriptor= characteristic.Call<AndroidJavaObject>("getDescriptor",ToAndroidUUID(uuid)); var isSet= descriptor.Call<bool>("setValue", bluetoothGattDescriptor.GetStatic<byte[]>("ENABLE_NOTIFICATION_VALUE")); if (isSet) { var iSwrite= gatt.Call<bool>("writeDescriptor", descriptor); if (iSwrite) { Debug.Log("開啟特性通知"); } } } }
有問題的朋友可以關注我的微信訂閱號給我留言
相關推薦
Unity實現Android源生平臺藍芽BLE4.0資料傳輸(三)
上篇我說到如何開啟系統藍芽 掃描裝置 連線 具體連線我們在這裡說 AndroidJavaObject wfzBluetoothGattCallback = new AndroidJavaObject("com.wfz.bletounity.WFZBluetoothGat
android藍芽ble4.0開發
1、許可權配置 AndroidManifest.xml裡配置,“android:required="true"表示apk只有在具有bluetooth_le屬性的系統裡執行。 <uses-feature android:name="android.hardwa
Android藍芽BLE4.0踩過的坑
一直都負責專案的藍芽模組,期間踩過很多坑,說出來跟大家分享一下。 1. 從簡單的開始,首先是許可權的問題,在Android6.0以上,部分機型需要開啟定位許可權,部分機型需要同時開啟GPS。所以使用藍芽之前,你可以動態申請定位許可權,或者直接將targetSdkVersio
android 藍芽4.0 分包傳輸資料 問題
最近一直被這個藍芽4.0資料傳輸問題的困擾,安卓版本這麼多,發現一樣的資料傳輸程式碼在不同手機上效果截然不同。 目前發現在5.1的系統上,藍芽4.0每次傳送256byte資料可行,但是在4.4的系統上每次傳輸資料最多為20byte。 下次傳輸時還未到BLE的
一文讀懂低功耗藍芽BLE4.2 資料包
BLE = BTLE = Bluetooth Low Energy (低功耗藍芽) 1. 怎樣抓取(偵聽)BLE4.2 空中資料包 (全頻道抓取:37,38,39 同時) * 硬體: 1) 一臺BLE4.2 裝置 (如: Nordic 52832,
如何設定藍芽CC2541的資料傳輸速率?-TI論壇的問答
檢視http://www.ti.com.cn/cn/lit/ug/swru191e/swru191e.pdf 296頁 通過MDMCTRL0.MODULATION 來設定 BLE data rate 是固定在1MBps的。如果您要使用其他 data rate 需要在 proprietary 模式下。
nRF52832 — 提高藍芽BLE的資料傳輸速率
文章出處:可不可以不取名(轉載文章,如有不妥,通知後我會立即刪除)講解2點: 為什麼 nordic的4.0協議棧中ble只能傳送20位元組的應用負載資料。 大量資料傳送時如何提高發送速率1:為何上層應用負載每次最多20位元組首先了解 4.0中鏈路層的包
Android開發之通過藍芽耳機實現訊飛語音識別的功能
近階段在開發一款app,實現通過藍芽耳機進行訊飛語音識別,獲取識別結果之後再通過語音合成從藍芽耳機播報出識別結果。上網也查了很多資料,大多是說通過一下兩行程式碼: mAudioManager.setBluetoothScoOn(true);
Android 藍芽4.0實現,自動匹配藍芽裝置
今天開始寫部落格來記錄我的工作學習成長,作為一個初學者,近期的一個工作是通過Android藍芽4.0來實現與藍芽裝置的資料交換,下面就通過程式碼和文字來解釋一下整個過程。 首先我要說明的是,我再專案中使用了一個開源庫,我覺得不錯,所有程式碼都
android ble 藍芽4.0多機通訊客戶端實現
自從進入軟體開發行業,都是一直在CSDN上索取無數資料,一直沒有貢獻過,今天突然想寫點什麼,第一次寫,寫點簡單的吧,不知道有沒有人看。 藍芽從4.0開始,支援了多裝置通訊,android 4.3開始支援了藍芽4.0,即 android ble關於ble 網上資料很多,也講的
Android如何監聽藍芽耳機的按鍵事件
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android命令列下藍芽使用
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
android進階3step2:Android App通訊——經典藍芽通訊
Android經典藍芽案例 - 一、Android中藍芽裝置的使用 - 1.藍芽許可權 - 2.藍芽功能開啟 - 3.搜尋藍芽裝置 - 4.建立RFCOMM通道 - 5.藍芽裝置雙向資料傳輸 1.開啟藍芽許可權:And
Android藍芽開發之低功耗藍芽(藍芽4.0)開發全記錄
主要內容概況 前面我記錄了開發藍芽2.0的過程,今天準備介紹現在的主流藍芽技術,藍芽4.0的開發,該藍芽技術是在Android4.3(API級別18)版本引入的API。 官方文件 具體的區別主要以下幾點: 1.新的藍芽技術提供了連線服務的方法,以前是沒有提供連線藍芽的方法
Android藍芽開發之經典藍芽(藍芽2.0)開發全記錄
前言部分 最近因為需要開始藍芽相關開發,所以在網上搜索了很多內容,並且結合自己的開發過程做了一個總結,先儲備上,也許可能幫到正在做藍芽開發的同學。 藍芽很早就是android裝置上基本通訊功能了,只是以前的沒有那麼多藍芽裝置,現在藍芽裝置種類繁多,所以經常會有人遇到藍芽相關的開發
Android BLE藍芽4.0開發—Android手機與BLE終端通訊
轉載自: https://blog.csdn.net/fu908323236/article/details/76208997 這篇部落格主要講解AndroidBLE藍芽4.0的基本概念,以及基礎用法。 BLE 即 Bluetooth Low Energy,藍芽低功耗技術,是藍芽
Android連續的獲取藍芽的RSSI
基於藍芽的RSSI可以有很多應用,要獲得藍芽的RSSI無外乎兩種方法,一種就是基於掃瞄的方法,優點是Android本身支援,缺點是scan的時間比較長,並且中間過程不受控制,為了連續的測量,需要不斷的scan;第二種就是,基於連線的方法,前提是要建立兩個藍芽裝置的連線後,再測量RSSI,
安卓藍芽4.0以上連線多臺裝置並接收藍芽裝置資料
前沿: 在我之前寫的程式碼中都沒有實現藍芽連線多個裝置,由於時間的原因沒有進行更改。 iOS端實現 藍芽多個連線確實比安卓的方便,本身利用官方的Demo就可以實現多臺連線,只不過自己利用view加以區分就可以。 到此藍芽4.0之前是通過scoket連線多臺
Android藍芽4.0 關閉藍芽重開無法根據地址連線問題
在藍芽專案的末尾,在個別手機上出來,手動關閉手機藍芽,和再次啟動,開啟app發現無法連線上,經過檢視log最後確定錯誤是: onClientConnectionState()- status=133 clientIf=5 device=地址 133的一個錯誤,前面試過很
Android獲取本機藍芽地址
從Android6.0開始,通過BluetoothAdapter.getDefaultAdapter().getAddress()獲取的地址是一個固定值02:00:00:00:00:00,部分從低版本