Подтвердить что ты не робот

Поддержка 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).

4b9b3361

Ответ 1

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

Ответ 2

К сожалению, нет обычных 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.

Ответ 3

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

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

Ответ 5

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