我試圖用RxAndroidBle(1.4.1)實現了自定義BLE外設和Android通訊庫之間建立數據傳輸。我使用默認的MTU(23字節),以便Android在當時只傳輸20個字節。該溝通與23的MTU一起工作,但我們真的希望更快的溝通。如何在RxAndroidBle中獲得更大的MTU?
我們的設備支持DLE和通信開始要求的158個字節的更大的MTU,並與幾乎所有的手機得到它。完成之後,設備開始發送最多155個字節的數據。正因爲如此,設備 - >移動通信是相當快,它工作正常。然而,在Android側,RxAndroidBle的getMtu()調用總是返回23(即使庫和測試應用程序已經使用minsdk = 21構建,在Android 7.1.1上運行)。我試圖建立連接後,調用添加到RxBleConnection.requestMtu(512),但導致沒有回調和getMtu()仍然返回23
我只是狠狠地調用setMaxBatchSize試了一下(155 )上createNewLongWriteBuilder,看會發生什麼。結果是更快的溝通沒有任何問題! (我在設備日誌上確認當時我們確實獲得了> 20個字節)。但是,爲避免設備不支持大型MTU時出現不愉快的意外,我真的希望該庫使用實際的MTU值,而不是「大猜測」。
那麼,什麼是RxAndroidBle獲取當前MTU的實際方法是什麼?有沒有阻止它工作的bug?
看來,'RxBleConnection.getMtu()'返回只有當MTU是由中央(安卓)要求或者根本沒有改變應有的價值。看起來像庫中的一個bug。 –
當然看起來這樣。我試圖反編譯RxAndroidBle並讀取代碼,並找不到任何代碼,如果requestMtu沒有被調用,它將更新RxBleConnectionImpl.currentMtu。 令我驚訝的是requestMtu(512)也沒有幫助。也許沒有變化,因爲連接已經有設備可以支持的最大值(158)... – user1987093
追加用於跟蹤:https://github.com/Polidea/RxAndroidBle/issues/293 –