Ответ 1
Как было обнаружено, 4.3 имеет поддержку BLE, но он настолько сломан, особенно на устройствах Nexus. По моему мнению, он не готов к производству.
Я пытаюсь найти способ работать с устройствами Bluetooth 4.0 (AKA Bluetooth Smart) с помощью современных Android-смартфонов, а именно - HTC One V.
Как я понял, есть некоторые проблемы, связанные с профилем GATT даже в Android 4.0 с оборудованием Bluetooth 4.0 из-за ограничений API.
Я видел, что 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.
После некоторых исследований я могу только сказать следующее:
Motorola присоединилась к Broadcom для разработки фирменного API. Казалось бы, он крайне ограничен, так как он утверждает, что поддерживает только существующие профили. Проверьте здесь.
Samsung не предоставляет никакой информации о своем BLE API, , который я могу проверить, существует и называется samsung.bluetoothle. Я на самом деле декомпилировал некоторые приложения из Google Play, которые используют возможности SGSIII BLE, и нашел несколько методов, которых нет в базовом BT API для Android, и они явно указывают, что они связаны с BLE. Я попытался использовать их с помощью java-рефлексии и в настоящее время разрабатываю возможность разработки библиотеки. Но тесты, которые я провел до сих пор, в лучшем случае имели потрясающие результаты. Также есть тема на форуме разработчиков Samsung, я бы предложил сделать здесь, если вы заинтересованы.
В этом аспекте Google почти не замечает. Там поток, касающийся этих проблем в Galaxy Nexus, который вы должны возглавить, с большим количеством людей, жалующихся. Ближайшая вещь к ответу от Google можно найти здесь.
[ОБНОВЛЕНИЕ]
Samsung также изменила пару классов Android, более конкретно:
BluetoothAdapter
BluetoothDevice
[ОБНОВЛЕНИЕ]
Поскольку я отложил эту проблему на некоторое время из-за отсутствия поддержки от Google и Samsung, я опубликую то, что я узнал до сих пор:
BluetoothAdapter
новые методы:
public boolean android.bluetooth.BluetoothAdapter.leTestEnd()
public boolean android.bluetooth.BluetoothAdapter.setAvStreaming(boolean)
public boolean android.bluetooth.BluetoothAdapter.setScanLE(boolean)
public void android.bluetooth.BluetoothAdapter.setScoPathChange(int)
public boolean android.bluetooth.BluetoothAdapter.startLeDiscovery()
Чтобы использовать их, выполните следующие действия:
BluetoothAdapter ba = new BluetoothAdapter();
Method starteLeDiscoveryMethod = null;
starteLeDiscoveryMethod = ba.class.getMethod("startLeDiscovery");
starteLeDiscoveryMethod.invoke(ba);
ПРИМЕЧАНИЕ. Этот метод, в частности, работает как обычный startDiscovery()
метод, но, по крайней мере для меня, он обнаруживает устройство BLE 2 из 5 раз.
И помните, это только для SGSIII. Я не собираюсь извлекать новые методы в BluetoothDevice
, но когда я это сделаю, я отправлю их здесь.
SDK 18 поддерживает его сейчас. Документы находятся здесь:
http://developer.android.com/guide/topics/connectivity/bluetooth-le.html
Тестирование на моем Nexus 4 сбивает стек bluetooth.
HTC поддерживает BLE с прошлого года с HTC One X +, Droid DNA и, конечно же, HTC One. Первоначально HTC BLE API был по запросу, но теперь он свободно загружался в http://htcdev.com.
Да, новый стандарт Android BLE API от Google в Android API уровня 18 подходит очень скоро (см. предварительный просмотр от IO-видео) - но вы можете обернуть сторонние API (HTC, Samsung и т.д.) совместимым способом поддержки новый стандартный API, поскольку все API-интерфейсы очень похожи в поддержке профиля GATT (аналогично IOS).
BluetoothGatt api доступен в andorid
https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html