Bluetooth Smart (4.0) / Soporte GATT en Android 4.0?


Estoy tratando de encontrar la manera de trabajar con Bluetooth 4.0 (TAMBIÉN conocido como Bluetooth Smart) dispositivos que utilizan teléfonos inteligentes Android modernos, a saber - HTC Uno V.

Según entendí, hay algunos problemas con el perfil GATT incluso en Android 4.0 con hardware Bluetooth 4.0 debido a las limitaciones de la API.

Vi Motorola lanzó su propia API para BT LE, pero no estoy seguro de que funcionará para otros proveedores. Mi objetivo es obtener soporte universal para todos los teléfonos inteligentes con el hardware adecuado.

Cualquiera sugerencia para la solución son muy apreciados.

Alexey

PD: Sí, vi la API de Android para HDP, pero parece que se usa solo con dispositivos Bluetooth 'clásicos' (no con dispositivos de baja energía, como lo hace BT LE).

Author: AjayKumarBasuthkar, 2012-04-06

6 answers

Desafortunadamente no hay API nativas de Android GATT simplemente porque Android actualmente no es compatible con Bluetooth de baja energía en absoluto. Esto puede cambiar en las próximas versiones de Android, pero hoy en día los fabricantes en lugar de integrar pilas Bluetooth de terceros con soporte de baja energía de proveedores como Qualcomm, Broadcom o CSR. Estos vienen con su propio conjunto de API, lo que obviamente limita la compatibilidad con el conjunto de teléfonos que utilizan la pila de ese proveedor en particular. La buena noticia es que en otras plataformas como iOS o Windows 8 hay API nativas de GATT BLE, y están bien soportadas. Para Android, tendremos que esperar hasta que Google decida integrar el trabajo Linux/BlueZ que se ha hecho en BLE con Android.

 26
Author: introiboad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-09 08:55:15

Después de algunas investigaciones solo puedo decir esto:

  • Motorola se ha puesto del lado de Broadcom para desarrollar una API propietaria. Parecería que es extremadamente limitado, ya que afirma que solo hay soporte para perfiles existentes. Échale un vistazo aquí.

  • Samsung no proporciona ninguna información sobre su API BLE, que puedo verificar que existe y se llama samsung.bluetoothle . De hecho, descompilé algunas aplicaciones de Google Play que utilizan el BLE de SGSIII capacidades y encontró un par de métodos que no existen en la API BT nativa de Android, y son nombres claramente estado que están relacionados BLE. He intentado usarlas a través de java reflection y actualmente estoy trabajando en la posibilidad de desarrollar una biblioteca. Pero las pruebas que he realizado hasta ahora han tenido resultados inestables en el mejor de los casos. También hay un hilo en el foro de desarrolladores de Samsung, yo sugeriría hacer algo de presión aquí si estás interesado.

  • Google ha hecho casi no observaciones en este aspecto. Hay un hilo con respecto a estos problemas en el Nexus Galaxy, que usted debe estrellas, con un montón de gente quejándose. Lo más parecido a una respuesta de Google se puede encontrar aquí.

[ACTUALIZACIÓN]

Samsung también ha modificado un par de clases de Android, más específicamente:

  • BluetoothAdapter
  • BluetoothDevice

[ACTUALIZACIÓN]

Ya que he dejado este tema a un lado por un tiempo debido a falta de apoyo de Google y Samsung Voy a publicar lo que he aprendido hasta ahora:

BluetoothAdapter nuevos métodos:

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

Para usarlos haga lo siguiente:

BluetoothAdapter ba = new BluetoothAdapter();
Method starteLeDiscoveryMethod = null;
starteLeDiscoveryMethod = ba.class.getMethod("startLeDiscovery");
starteLeDiscoveryMethod.invoke(ba);

NOTA: Este método en particular funciona algo como el método regular startDiscovery() pero, al menos para mí, descubre el dispositivo BLE 2 de 5 veces. Y recuerda , esto es solo para el SGSIII . No he llegado a extraer los nuevos métodos en BluetoothDevice pero cuando lo haga, los publicaré aquí.

 13
Author: Moises Jimenez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-13 00:30:51

SDK 18 tiene soporte para ello ahora. Los documentos están aquí:

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

Las pruebas en mi Nexus 4 están bloqueando la pila de Bluetooth.

 2
Author: Nick Palmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 21:26:30

HTC ha tenido soporte BLE desde el año pasado con HTC Uno X+, Droid DNA y, por supuesto, el HTC Uno. Inicialmente la API de HTC BLE estaba a petición, pero ahora se puede descargar libremente en http://htcdev.com .

Sí, la nueva API estándar de Android BLE de Google en el nivel de API de Android 18 llegará muy pronto (ver vista previa de IO video), pero puede envolver las API de terceros (HTC, Samsung, etc.) de una manera compatible para admitir la nueva API estándar, ya que todas las API son bastante similares en su soporte del perfil GATT (similar a IOS).

 1
Author: dljava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-12 18:24:38
 0
Author: Palak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-30 05:38:19

Como se descubrió, 4.3 tiene soporte para BLE, pero está tan roto, especialmente en dispositivos Nexus. En mi opinión, no está listo para la producción.

 0
Author: AlexeyVMP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-03 10:42:49