Я помню, как читал в "Guide and Hint" -doc к Samsung BLE API (archived page):Является ли обычная реализация Android BLE синхронной по своей природе?
Одним из наиболее важных понятий Samsung F/W и стек его синхронная природа. То есть, если мы называем, например,
writeCharacteristic
для конкретного признака, если она возвращаетtrue
, следующий вызов любомуBluetoothGatt
илиBluetoothGattServer
метода должно быть сделано после того, какonCharacteristicRead
обратного вызова принимается. Это происходит потому, что стек предназначен для поддержки и процесса только один GATT вызова в то время, и если, к примеру, вы звонитеwriteCharacteristic
илиreadCharacteristic
на любой характеристике скоро после первой, она игнорируется.
- ли это, применяются также к реализации Натив из BLE представил в Android 4.3?
- Samsung API также поддерживает только одно подключенное устройство GATT за раз. Изменилось ли это в native API?
Там в постоянный поток связан с синхронным характером API на отслеживания проблем Google: https://code.google.com/p/android/issues/detail?id=58381 –
Я просто реализован очередь для всех записей, и это пока работает хорошо. –
@Ash Согласно документам, предоставленным SAMSUNG, поведение не ограничивается операциями записи. Да, использование очереди - это общий способ решить эту проблему. «хорошо работает до сих пор»: трудно проверить и воспроизвести отмену команды другим. Часто вы столкнетесь с проблемами, когда ваш код BLE становится более сложным, потому что вы делаете больше вещей на основе предыдущих вызовов.Я выполняю только следующую операцию BLE после того, как закончил (полученный ответ), или после того, как он не завершился в соответствующее время. Кстати, ваши комментарии подойдут лучше, как ответ на этот вопрос. – OneWorld