我遇到了Android 6.0和一些藍牙低功耗設備的嚴重問題。其中一個抵觸的裝置是這樣的一種:Android 6.0棉花糖BLE連接問題
DEVICE INFO:
Name: Samsung Galaxy SV
Model number: SM-G900V
Android vers: 6.0.1
Patch level: May 1, 2016
Hard. vers: G900V.05
如果我讓一些壓力測試基於連接和斷開該應用一個BLE外圍成功率勉強達到50%。
讀了Android的最新文檔,他們建議以指定connectGatt方法的最後一個參數的傳輸模式來執行BLE交通連接,而非BR/EDR:
device.connectGatt(this, false, mGattCallback, BluetoothDevice.TRANSPORT_LE);
自認倒黴改善改變。
繼一些suggestions並閱讀了關於BLE連接問題後,我發現了三星Galaxy S6的幾個相關問題,並在one of those中提出了一系列解決BLE連接問題的步驟。關鍵之一是對clear Bluetooth Share system app數據。這樣做,連接率立即增加了幾乎100%的成功。但是,如果您等待和其他一些BLE應用程序一起玩並連接到其他外設,問題遲早會回來。
有在試圖解決這些BLE問題,他們基本上做的是谷歌播放some apps:
/system/bin/rm -r /data/misc/bluetoothd/*
/system/bin/rm -r /data/misc/hcid/*
雖然這是一個方法來清除藍牙高速緩存,它需要植根是設備不是專業應用程序的合理解決方案。
我研究的私人Android API並沒有幫助我解決這個問題,而我發現的唯一類似的是enforce service discovery cache cleanup,這與問題無關。
使用BLE分組嗅探我看到ADV_CONNECT_REQ
甚至沒有從設備發送到外圍設備,並在一段時間後在Android堆觸發BluetoothGattCallback
的STATE_DISCONNECTED
事件。
我不完全知道爲什麼這個問題出現在一些6.0設備中,而不是其他的,因爲藍牙共享緩存似乎是問題所在。那裏存儲的是什麼?剛剛連接/配對的設備?我是唯一遇到這個問題的人嗎?如果不是,你們如何解決它?我不想指導最終用戶如何清除藍牙共享應用程序數據。
測試這對S6邊緣,我可以證實,清除藍牙共享緩存和數據幫助其連接,而無需通過BluetoothDevice.TRANSPORT_LE參數。我失去了爲什麼會發生這種情況。清除緩存之前,它根本沒有連接。 –
這很好,你知道我不是唯一一個。感謝@CanCanbek的反饋,希望有人能幫助我們。 – GoRoS
我看了上面的內容,我明白了你的意思,在6.0系統上的S6 edge,在執行connectGatt()函數後,執行到cache操作,可以保證正常的手機和通信設備不會有耽擱。這是什麼意思?@ Can Canbek – amibition