2016-08-29 50 views
0

我正在開發一款應用程序,它使用低功耗藍牙與BLE設備進行通信。問題是該項目需要高度連續的數據交換才能工作。Android BLE,從同一設備進行寫入和讀取,無損耗吞吐量和時間

目前我已經開發了4個片段,它們共享相同的BluetoothGatt性能和相同的數據陣列。當我連接到BLE設備時,我將連接優先級設置爲高,然後我開始寫入數據的寫入循環,通常只有4個字節,每50毫升。

與此同時我開始閱讀並更新我的界面。 我注意到,如果我停止寫作,我每隔50毫升收到一包數據,但如果我讓寫循環工作,讀取時間從50毫升增加到100或更多。 這不是一個真正的大問題,但它減少了所有的系統性能。

我在網上尋找解決方案,但除了已經幫助我很多的連接優先級外,我什麼都沒找到,我想知道是否有人從未處理過這樣的問題以及他是如何做到的。謝謝

+0

對'特性'使用'write'和'read'是某種**重任務**,因爲它涉及多個無線信號交換以確認數據傳輸。如果您需要頻繁發送數據或發送大量數據,我相信您需要使用**特徵通知**系統。它意味着傳輸數據,而不是偶爾進行交流的讀寫。拿一個溫度計燈標:你會想知道溫度變化(而不是手動讀取它),但是你想寫一個特性來在F°和C°度之間切換。而已 ! – Mackovich

+0

查找文檔後,下面是您想要使用的方法:[BluetoothGattServer#notifyCharacteristicChanged](https://developer.android.com/reference/android/bluetooth/BluetoothGattServer.html) – Mackovich

+0

那麼你建議設置特性值然後通知變化而不是設置值並調用寫入?對不起,我只是不想誤解,非常感謝您的幫助! –

回答

1

BLE您正在使用的設備有一些稱爲「連接間隔」的內容。它被設置在設備的固件中。它的最小值是7.5ms,但通常設置爲30ms或更多(iOS甚至不會在間隔低於20-30ms的情況下工作,否則它將丟失數據包)。

因此,當設計BLE設備固件時,連接間隔設置爲一些安全的值,並且可與大多數移動設備配合使用,對於節省電池也非常重要。

這意味着您可以在每個連接間隔內轉移到設備或從設備轉移一次,如果是讀取,寫入或通知則無需轉移。

一些設備具有允許更改連接間隔的配置設置,但如果您只是想知道發生了什麼,那就是它。

+0

好吧,我明白這個概念。我已經減少了Android設備上的連接間隔設置「連接優先級高」。我只想知道如何避免連接間隔時間的增加,同時我讀取和寫入 –

+0

這是您在Android設備上完成的操作,但固件仍然有其自身的價值。無論如何,沒有價值的東西,在這種情況下你不能避免間隔時間的增加。您可以在單個連接間隔中讀取或寫入。如果你開始寫作,你的閱讀將被推遲到下一個空閒時隙(連接間隔),反之亦然。 –

+0

@ L.Gangemi我很好奇,你是如何將優先級設置爲高的?我很感興趣 ! – Mackovich