tecnologia studio programacion para low example dispositivos detectar buscar ble beacons beacon app android ios bluetooth-lowenergy core-bluetooth android-4.3-jelly-bean

studio - Cómo conectar un dispositivo Android a un dispositivo iOS a través de BLE(Bluetooth Low Energy)



programacion de beacons (4)

Intento hacer una aplicación que use la nueva API Bluetooth Low Energy de Android. Para esto, comencé con la muestra BLE que viene con API nivel 18 .

Mientras leo que Android no puede funcionar como periférico, puse el teléfono Android en modo central, buscando dispositivos BLE a su alrededor. Para este propósito, realicé algunas pruebas con una plataforma nórdica que simula un sensor de corazón. ¡Todo funciona de manera perfecta!

Después de esto, trato de elegir un iPhone (iOS 7 beta 4) y ponerlo de manera Periférica y simular un sensor de frecuencia cardíaca como las pruebas anteriores. La aplicación de Android puede ver el dispositivo y conectarse a él. Pero después de que la conexión está activa, los 2 dispositivos se desconectan entre sí en 3-4 segundos. Además de eso, cuando llamo discoverServices () en el lado de Android, ¡no se activa la devolución de llamada! En algunos casos, el dispositivo Android recibe el evento "Conectado" incluso si el chip Bluetooth de iOS está desactivado. Esto es muy extraño. Para demostrarlo, puse el Nordic Board en modo central y pude conectarme correctamente al dispositivo iOS sin problemas.

¿Qué podría ser? Existen algunas limitaciones en Android o iOS que no permiten la conexión de un Android a un iOS o viceversa.

Gracias.

EDITAR: Después de algunas pruebas difíciles, planteé un problema en la página de AOSP. Puede ser revisado here


Agregar un resumen para referencia:

¿Qué podría ser? Existen algunas limitaciones en Android o iOS que no permiten la conexión de un Android a un iOS o viceversa.

Cuando se conecta a un servidor GATT que se anuncia como dispositivo de modo dual (BLE y BR / EDR) llamando a connectGatt (...), el indicador TRANSPORT_AUTO que se agrega internamente hace que Android pase por defecto al modo BR / EDR ( link ).

Las siguientes soluciones son posibles:

  1. Lado periférico: deje de publicitar las capacidades BR / EDR ajustando los indicadores apropiados ( link )
  2. Lado central: establezca el parámetro de transporte explícitamente a TRANSPORT_LE llamando a la versión oculta de connectGatt () usando la reflexión

Ejemplo:

public void connectToGatt(BluetoothDevice device) { ... Method m = device.getClass().getDeclaredMethod("connectGatt", Context.class, boolean.class, BluetoothGattCallback.class, int.class); int transport = device.getClass().getDeclaredField("TRANSPORT_LE").getInt(null); // LE = 2, BREDR = 1, AUTO = 0 BluetoothGatt mGatt = (BluetoothGatt) m.invoke(device, this, false, gattCallback, transport); ... }

Editar 4/2016

Como señaló Arbel Israeli en el comentario, Google introdujo una versión sobrecargada de connectGatt(...) que permite especificar el transporte en Android M.


He escrito un ejemplo de trabajo simple, relativamente simple, y lo incluí en open-source en Github: https://github.com/GitGarage . Hasta ahora solo se ha probado con un Android Nexus 9 y un iPhone 5s, pero supongo que también funcionaría con un Nexus 6 y varios tipos de iPhone. Hasta ahora está configurado explícitamente para comunicarse entre un Android y un iPhone, pero supongo que es modificable para hacer mucho más.


Los dispositivos iOS siempre son periféricos o centrales, pero los dispositivos Android no pueden ser raros. En este caso, su dispositivo iOS debe ser periférico y Android debe ser central. Podemos pensar que periféricos es un servidor y que central es un cliente. Esto es simple.


Tal vez un poco retrasado, pero tal vez su dolor puede aliviarse ligeramente;)

Hemos estado experimentando mucho con conexiones BLE multiplataforma (iOS <-> Android) y aprendimos que todavía hay muchas incompatibilidades y problemas de conexión. Además de la inestabilidad de Android, también debes tener en cuenta que, hasta el día de hoy, no muchos dispositivos Android realmente admiten el modo BLE Peripheral.

Por lo tanto, si su caso de uso se basa en funciones y solo necesita un intercambio de datos básico, le sugiero que consulte Marcos y Bibliotecas que pueden lograr la comunicación multiplataforma para usted, sin que sea necesario construirlo desde cero.

Por ejemplo: http://p2pkit.io o google cerca

Descargo de responsabilidad: trabajo para Uepaa, desarrollando p2pkit.io para Android e iOS.