Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android Things
Code

Conecta Android Things a un teléfono inteligente con Nearby Connections 2.0

by
Difficulty:IntermediateLength:MediumLanguages:

Spanish (Español) translation by Carlos (you can also view the original English article)

Una de las primeras cosas que los usuarios querrán hacer con un nuevo dispositivo doméstico inteligente es conectarlo a su red inalámbrica. Muchos dispositivos de IoT (Internet de las cosas) no cuentan con pantalla o teclado, así que una manera de hacerlo es permitir a los usuarios emparejar un teléfono inteligente con el dispositivo para que puedan controlarlo y configurarlo. Así es como funcionan Nest y Google Home, entre otros, y la API Nearby Connections 2.0 lo hace posible.

Google Home companion app connection screen

En este artículo, daré una introducción a la API Nearby Connections 2.0 y cómo se puede utilizar para emparejar un smartphone Android con un dispositivo Android Things para ofrecer a tus usuarios una experiencia de dispositivo complementaria

¿Qué es la API Nearby Connections?

La API Nearby Connections permite que dos dispositivos se comuniquen entre sí directamente a través de Bluetooth o de manera inalámbrica sin el uso de un punto de acceso centralizado. Hay dos funciones que un dispositivo puede asumir: advertiser (anunciante), que permite a otros dispositivos saber que está disponible para ser conectado, y discoverer (descubridor), que intenta encontrar anunciantes y conectarse a ellos. Una vez que un grupo de dispositivos (también conocidos como «puntos finales» en esta etapa) se han conectado entre sí, pueden enviar datos a cualquier otro punto final de la red Nearby Connections .

Hay dos estrategias que la API Nearby Connections puede utilizar para conectar dispositivos entre sí. La primera, P2P_STAR, es el más simple para trabajar Consiste en un anunciante que puede soportar múltiples descubridores que se conecten a él. El segundo, P2P_CLUSTER, permite que cualquier número de dispositivos se conecten y acepten conexiones de cualquier otro número de dispositivos. Esto crea una red de malla con un punto de falla menos centralizado, aunque también ocupa más ancho de banda. Esta estrategia es ideal para cargas más pequeñas que no necesitan pasar por un dispositivo central, como en el caso de los juegos.

Este tutorial se enfocará en el uso de la estrategia de estrella más simple para conectar el dispositivo de IoT como anunciante y usará el teléfono inteligente del usuario como descubridor. No obstante, al final, también tendrías suficiente información para implementar una estrategia de grupo.

¡Vamos a configurar!

Para este tutorial habrá dos módulos: la aplicación para móviles y la aplicación de Android Things. Una vez que los hayas creado en Android Studio, deberás incluir la dependencia de Google Play Services para Nearby Connections en el archivo build.gradle de nivel de módulo para ambas aplicaciones.

Después de que hayas ejecutado una sincronización de gradle, abre los archivos AndroidManifest.xml para ambos módulos e incluye los siguientes permisos dentro de los nodos application.

Los dispositivos Android Things tendrán estos permisos otorgados al dispositivo después de reiniciarlo, aunque tendrás que solicitar el permiso de ubicación de los usuarios en la aplicación del teléfono.

La clase MainActivity, tanto en el módulo things como en módulo mobile deberá implementar las interfaces utilizadas para llamada de vuelta (callbacks) de los servicios de Google Play, de esta forma:

Una vez que hayas validado que el usuario tiene los permisos de ubicación adecuados en onCreate(), puedes empezar a conectarte a Google Play Services para utilizar la API Nearby Connections.

Cuando GoogleApiClient termine de conectarse, se llamará al método onConnected(). Aquí es donde iniciará el proceso de advertising o discovery del dispositivo. Asimismo, ambas aplicaciones necesitarán una identificación de servicio, que es un identificador String único.

Advertising en conexiones cercanas

Al trabajar con la API Nearby Connections, deberás crear un ConnectionLifecycleCallback que, como su nombre lo indica, se activará en varios eventos del ciclo de vida de la conexión. Para esta demostración, solo utilizaremos el método onConnectionInitiated(). Guardará una referencia al primer punto final que intente conectarse a él, aceptar la conexión y luego dejar de hacer advertising. Si la conexión no es exitosa, la aplicación puede reiniciar el modo advertising.

Quizá hayas notado que el método anterior también hace referencia a un objeto PayloadCallback. Este objeto tiene métodos que se llaman cuando se envía una carga de datos del advertiser a un punto final, así como cuando se reciben datos de un punto final. El método onPayloadReceived() es donde controlaríamos cualquier envío de datos a nuestro dispositivo Android Things. Este método contiene el objeto Payload que se puede convertir en una matriz de bytes, y una cadena (String) que representa la dirección del punto final del dispositivo de envío.

En este punto, puedes empezar a hacer advertising en tu dispositivo IoT con el siguiente método:

Puedes notar que aquí es donde aplicamos la estrategia P2P_STAR a nuestra red Nearby Connections.

Cuando quieras enviar una carga a otro dispositivo, puedes utilizar el método Nearby.Connections.sendPayload() con la referencia del cliente del API de Google, el nombre de tu punto final y una matriz de bytes de los datos que deseas enviar.

Sugerencia: Habilita WiFi al reiniciar

Un truco que me resultó útil al trabajar con la API Nearby Connections en un dispositivo Android Things es volver a habilitar WiFi al reiniciar, ya que el dispositivo puede terminar con la conexión inalámbrica deshabilitada si se apaga o pierde potencia durante el modo advertising. Puedes hacerlo recuperando el servicio del sistema WifiManager y llamando a setWifiEnabled().

Descubrir dispositivos con Nearby Connections

Descubrir un dispositivo sigue un patrón muy similar al de advertising. El dispositivo se conectará al cliente de la API de Google y empezará a descubrir. Cuando se encuentra un advertising, el discoverer solicitará conectarse a él. Si el advertiser aprueba la solicitud, entonces los dos dispositivos se conectarán y podrán enviar cargas ida y vuelta. El discoverer usará un PayloadCallback igual que el advertiser.

ConnectionLifecycleCallback del discoverer (de la aplicación móvil) también se verá similar a la del advertiser:

Lo que es diferente es que los descubridores (discoverers ) requerirán un EndpointDiscoveryCallback que se utilizará cuando se encuentre un advertiser, pero que aún no esté conectado. Este objeto iniciará la solicitud para conectarse con el advertiser.

Una vez que tu discoverer se haya conectado a Google Play Services, puedes iniciar el descubrimiento con el siguiente comando:

Por último, cuando quieras desconectarte de un advertiser, puedes utilizar el método disconnectFromEndpoint() de la API Nearby Connections. En general, es una buena idea hacer esto en la llamada de vuelta (callback) onDestroy() de tu Activity.

Conclusión

En este artículo, aprendiste acerca de la API Nearby Connections 2.0 para Android en el contexto de la creación de una aplicación complementaria para un dispositivo de IoT de Android Things.

Cabe señalar que esta API puede usarse para cualquier dispositivo Android que desees interconectar, desde teléfonos y tabletas hasta cajas de TV Android y relojes inteligentes Android Wear. La API ofrece una manera sencilla para conectarse y comunicarse sin el uso de Internet o de un router centralizado, y añade una gran utilidad a tu colección de herramientas para el desarrollo de Android.

Mientras estás aquí, ¡revisa algunas de nuestras otras publicaciones sobre el desarrollo de IoT de Android Things!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.