Bluetooth Smart (4.0) / поддержка GATT в Android 4.0?
=====================================================

Я пытаюсь найти способ работы с устройствами Bluetooth 4.0 (AKA Bluetooth Smart) с использованием современных смартфонов Android, а именно - HTC One V.

Как я понял, из-за ограничений API есть некоторые проблемы с использованием профиля GATT даже в Android 4.0 с аппаратным обеспечением Bluetooth 4.0.

Я видел, что Motorola выпустила собственный API для BT LE, но не уверен, что он будет работать для других поставщиков.
Моя цель - получить универсальную поддержку для всех смартфонов с соответствующим оборудованием.

Любые предложения для решения высоко ценятся.

Алексей

PS: Да, я видел Android API для HDP, но, похоже, он используется только с «классическим» Устройства Bluetooth (не энергосберегающие, как BT LE).

Как выяснилось, 4.3 имеет поддержку BLE, но она так не работает, особенно на устройствах Nexus.
По моему мнению, он не готов к производству.



К сожалению, нет собственных API GATT для Android просто потому, что Android в настоящее время вообще не поддерживает Bluetooth Low Energy. Это может измениться в следующих выпусках Android, но сегодня производители вместо этого интегрируют стеки Bluetooth сторонних производителей с поддержкой Low Energy от таких поставщиков, как Qualcomm, Broadcom или CSR. Они поставляются со своим собственным набором API, очевидно ограничивающим совместимость с набором телефонов, использующих стек данного конкретного поставщика.
Хорошей новостью является то, что на других платформах, таких как iOS или Windows 8, есть собственные API-интерфейсы GATT BLE, и они хорошо поддерживаются. Для Android нам придется подождать, пока Google не решит интегрировать работу Linux / BlueZ, которая была проделана на BLE с Android.



BluetoothGatt API доступен в Android

<https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html>



HTC имеет поддержку BLE с прошлого года с HTC One X +, Droid DNA и, конечно, HTC One. Первоначально API HTC BLE предоставлялся по запросу, но теперь его можно бесплатно загрузить по адресу<http://htcdev.com>. 

Да, новый стандартный Android BLE API от Google в Android API Level 18 появится очень скоро (см. Предварительный просмотр видео IO) - но вы можете совместить сторонние API (HTC, Samsung и т. Д.) Совместимым способом для поддержки нового стандартного API поскольку все API довольно похожи в своей поддержке профиля GATT (аналогично IOS).



После некоторых исследований я могу только сказать следующее:

Motorola has sided with Broadcom to develop a proprietary API. It would seem it is extremely limited since it states there's support for existing profiles only. Check it out [here](http://www.motorola.com/sites/motodev/library/bluetooth_apis.html).

Samsung fails to provide any information regarding its BLE API, **which I can verify exists and is called samsung.bluetoothle**. I actually decompiled some apps from Google Play that use the SGSIII's BLE capabilities and found a couple of methods that do not exist in Android's native BT API, and they're names clearly state they're BLE related. I've tried using them through java reflection and am currently working out the possibility of developing a library. But tests I've run so far have had shakey results at best. There is also a thread on Samsung's developer forum, I would suggest making some pressure [here](http://developer.samsung.com/forum/board/thread/view.do?boardName=GeneralB&messageId=157757) if you're interested.

Google has made almost no remarks in this aspect. There's a [thread](https://code.google.com/p/android/issues/detail?id=33371&q=Support%20for%20Bluetooth%204.0%20Low%20Energy%20Profile&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars) regarding this issues in the Galaxy Nexus, which you should star, with a lot of people complaining. The closest thing to an answer from Google can be found [here](https://groups.google.com/forum/#!msg/android-platform/CYtxCmtZ-WI/aIzBq7KbKVUJ).

**[UPDATE]**

Samsung также изменил несколько классов Android, в частности:

`BluetoothAdapter`
`BluetoothDevice`
**[UPDATE]**

Поскольку я отложил эту проблему на некоторое время из-за отсутствия поддержки со стороны Google и Samsung, я опубликую то, что узнал до сих пор:

`BluetoothAdapter` новые методы:

Для их использования сделайте следующее:

ПРИМЕЧАНИЕ. Этот метод, в частности, работает как обычный`startDiscovery()` метод, но, по крайней мере для меня, он обнаруживает устройство BLE 2 из 5 раз.
А также**remember**это только для**SGSIII**, Я не удосужился извлечь новые методы в`BluetoothDevice` но когда я это сделаю, я опубликую их здесь.



SDK 18 поддерживает это сейчас. Документы здесь:

[http://developer.android.com/guide/topics/connectivity/bluetooth-le.html](https://developer.android.com/guide/topics/connectivity/bluetooth-le.html)

Тестирование на моем Nexus 4 приводит к сбою стека Bluetooth.