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

Я пытаюсь найти способ работы с устройствами 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).


person AlexeyVMP    schedule 06.04.2012    source источник
comment
Samsung опубликовала Bluetooth BLE SDK (бета). См. этот вопрос stackoverflow.com/questions/11104708/   -  person OneWorld    schedule 02.05.2013
comment
Вот официальное заявление о BLE от сотрудников Google на последнем IO developers.google.com/ events/io/sessions/326240948 Все устройства с аппаратным обеспечением 4.3 и BLE будут иметь официальный Android BLE API, который демонстрируется в этом видеосеансе.   -  person OneWorld    schedule 25.06.2013


Ответы (6)


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

person introiboad    schedule 09.04.2012
comment
Спасибо. Не могли бы вы указать поставщиков, которые предлагают пользовательский SDK BT LE Android для своих платформ? (кроме Моторола) - person AlexeyVMP; 09.04.2012
comment
Привет Алексей. Хотя я не хочу публично говорить о конкретных поставщиках, обычно достаточно просмотреть общедоступный веб-сайт квалификации Bluetooth (bluetooth.org/tpg/listings.cfm), чтобы увидеть, кто и что квалифицировал с точки зрения стеков для Android. Попробуйте расширенный поиск, а затем ограничьте версию спецификации до 4.0 (вы также можете попробовать 4.0+HS), а затем просто найдите Android или известных поставщиков. - person introiboad; 10.04.2012
comment
Я забыл упомянуть, что тогда вы также можете искать конкретные телефоны и их квалификационные списки, и они обычно ссылаются на QID (идентификатор квалификации) стека, который они используют, что позволяет вам сопоставлять определенные модели телефонов с поставщиками стека. - person introiboad; 10.04.2012
comment
Вы проверили этот API для чипа Broadcom?code.google.com/p/broadcom- бле - person friedger; 31.05.2012
comment
Ходят слухи, что Google выпустит официальный API примерно в августе 2012 года. - person chwi; 25.06.2012
comment
Насколько я понял, в Android 4.1 никаких подвижек по этому вопросу не было :( - person AlexeyVMP; 22.09.2012
comment
Более того, похоже, что Motorola сломала поддержку BLE на RAZR с обновлением ICS. - person AlexeyVMP; 22.09.2012
comment
Если вам нужна поддержка GATT API, отметьте этот выпуск Android звездочкой: code.google. .com/p/android/issues/detail?id=33371 - person kenyee; 03.10.2012
comment
Хорошо, я отметил этот выпуск звездочкой. Также у меня есть информация, что Samsung пообещала исправить это в ближайшее время для линейки Galaxy. - person AlexeyVMP; 06.10.2012
comment
На самом деле я декомпилировал некоторые приложения из Google Play, которые используют возможности SGSIII BLE, и нашел пару методов, которых нет в собственном BT API Android, и в их названиях четко указано, что они связаны с BLE. Я пытался использовать их через отражение java и в настоящее время разрабатываю возможность разработки библиотеки. Но тесты, которые я проводил до сих пор, давали шаткие результаты. - person Moises Jimenez; 28.11.2012

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

  • 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, но когда я это сделаю, я опубликую их здесь.

person Moises Jimenez    schedule 28.11.2012
comment
Я могу подтвердить, что этот код работает на Android 4.1.1 Samsung SGIII. Какие-нибудь дальнейшие открытия родкаром? - person BBaker; 22.01.2013
comment
Вероятно, на следующей неделе мне придется разработать как можно более кроссплатформенное решение для BLE на Android. Есть ли шанс, что у вас есть пример кода, который мог бы помочь мне в моих поисках? Интернета не так много, как хотелось бы. - person Mamsaac; 17.03.2013
comment
Сожалею, но сообщаю вам, что разработать кросс-платформенное решение будет невозможно. Имейте в виду, что единственными возможными вариантами являются API Mototola и то, что я собрал до сих пор. - person Moises Jimenez; 18.03.2013
comment
Вы заметите, что в 3 из 5 раз он не работает, если вы попытаетесь отключить Bluetooth, телефон зависнет. - person τεκ; 01.04.2013
comment
Ага, так и было сказано в заметке (сколько раз работает, не заметил сбоя). - person Moises Jimenez; 02.04.2013

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

http://developer.android.com/guide/topics/connectivity/bluetooth-le.html

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

person Nick Palmer    schedule 01.08.2013

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).

person dljava    schedule 12.06.2013

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

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

person Palak    schedule 30.05.2014

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

person AlexeyVMP    schedule 03.06.2014