¿Es posible detectar dispositivos Android que se encuentran lado a lado

Estoy desarrollando una aplicación de Android que requiere que los dispositivos se pongan lado a lado y / o arriba y abajo unos de otros.

Sé que puedo usar el API cercano para detectar dispositivos "cercanos" sin embargo necesito algo un poco más "fino grained".

Mi aplicación debe ser capaz de identificar un dispositivo que se encuentre en el lado izquierdo, arriba, derecha o abajo. Mientras todos los dispositivos están colocados sobre una mesa (por ejemplo).

No puedo encontrar nada en la web que describa este caso de uso.

¿Es posible?

ACTUALIZAR

Mi caso de uso es que quiero que los dispositivos Android sean capaces de detectar cualquier número de "Otros Dispositivos", ya sea a su izquierda o derecha. Los dispositivos serán dispuestos horizontalmente con un "pequeño" espacio entre cada uno.

De la misma manera que puede diseñar los bloques con letras de los niños para deletrear una palabra o frase, o bloques numerados para hacer una suma.

No sólo la línea de dispositivos debe ser capaz de detectar a sus vecinos inmediatos a su izquierda y derecha de los dos dispositivos en cada extremo debe ser capaz de detectar que son el principio y el final (lectura de izquierda a derecha) de la línea.

El uso de sensores de proximidad es una forma probable de resolver su pregunta. TYPE_PROXIMITY dará la distancia de un objeto cercano. TYPE_MAGNETIC_FIELD da la intensidad del campo geomagnético en x / y / z.

Para obtener más información sobre los sensores de posición .

Una idea, en caso de que sea relevante para su caso de uso:

  • Fase de configuración
    • Inicie su aplicación en cada dispositivo en "modo de emparejamiento".
    • Cada dispositivo mostrará un código QR que contiene la clave necesaria para comunicarse con el dispositivo (por ejemplo, a través de Firebase), y los detalles de la pantalla: tamaño en píxeles. También dibujará un rectángulo en los límites de la pantalla.
    • Un teléfono diferente, externo a este diseño, ejecutará tu aplicación como un "maestro", tomando una foto de los teléfonos desde arriba.
    • Ahora es necesario escribir un algoritmo para identificar las pantallas y sus ubicaciones, orientación y extraer los códigos QR para el análisis. No es fácil, pero factible.
  • Fase de interacción
    • Ahora todos los teléfonos (esto debería funcionar en más de dos teléfonos) pueden colaborar pantallas para mostrar partes de la misma película, por ejemplo.
  1. Haciendo su propio Mock GPS (Local PS para ser exactos). No tengo un enlace para esto, pero es definitivamente posible. Echa un vistazo a cómo funciona el GPS para tener una idea. Wifi y Bluetooth son señales. Pero ¿sabes qué más es una señal?

A: SONIDO

Hacer que cada teléfono haga un gran pitido a su vez y medir la fuerza de audio usando receptores. Esto podría funcionar mejor que wifi / bluetooth. Una vez que se mide la distancia relativa entre cada par de teléfonos, sólo se necesita un buen algoritmo para encontrar posiciones relativas

  1. Una solución alternativa posible: utilizar el procesamiento de imágenes. Obtener algo como OpenCV para Android y configurar un teléfono como un maestro. Esto funcionará sólo para un diseño 2D.

  2. Otra "idea" – utilizar las cámaras. Stick Un tablero en la parte superior de su superficie con 4 códigos QR en cada esquina. (Esto le ayudará a identificar los bordes y la orientación de su teléfono). Si estás buscando un diseño 3D y los teléfonos tienen suficiente espacio intermedio, puedes pegar un QR detrás de cada teléfono y mostrar un QR en la pantalla de cada teléfono.

Todas estas son soluciones. Tal vez usted puede utilizar los individuales. Tal vez usted puede usar una combinación. quién sabe.

Parece que no, si tiene sólo 2 dispositivos, pero si tiene fuentes externas (con posición conocida) de cualquier señal (audio, vibración, radio BT o WiFi, etc.), que pueden ser detectadas por dispositivos con la precisión adecuada, y los dispositivos El tiempo se sincroniza, Puede hacer esto comparando el tiempo de inicio de señal (o intensidad de señal) en ambos dispositivos como en esta imagen:

Ejemplo

O, si puede agregar algunos sensores a uno de los dispositivos, puede crear "otro localizador de dispositivos", por ejemplo, como este localizador de sonido.

ACTUALIZAR

En una formulación actualizada, la cuestión tampoco es solucionable: es posible determinar qué dos dispositivos están en el borde, pero no se puede determinar cuál está a la izquierda y cuál está en el lado derecho. Es necesario que al menos un dispositivo sepa que, por ejemplo, está más a la izquierda – entonces otros dispositivos, por ejemplo, generan un sonido, los otros lo reciben y determinan su orden según la diferencia en el tiempo de llegada. Pero el punto de anclaje y la sincronización del tiempo son necesarios.

Al minimizar su caso de uso, es posible encontrar el número de dispositivos rodeados por el dispositivo host, utilizando Api cercano, otras técnicas. Pero encontrar cuántos dispositivos de cada lado! No creo que sea posible con el hardware y la tecnología móviles actuales. Porque, considerando todos los factores, los sensores magnéticos son la solución menos posible. Pero los móviles actuales no tienen tal capacidad.

El siguiente punto que hice basado en las respuestas anteriores. TYPE_ACCELEROMETER, TYPE_LINEAR_ACCELERATION, TYPE_MAGNETIC_FIELD, TYPE_ORIENTATION estos sensores reaccionan al campo magnético alrededor del dispositivo (la brújula reacciona al imán). Puedes probar una aplicación usando TYPE_MAGNETIC_FIELD , probar cómo reaccionará a otro dispositivo cuando esté cerca de él (creo que reaccionará).

Pero el punto que estoy tratando de hacer aquí es, si usted pone tres dispositivos a un lado y 4 dispositivos a otro lado, el sensor MAGNETIC_FIELD lee campo magnético relativo. Así que no podemos identificar cómo pueden los dispositivos de cada lado, Hasta que no haya hecho algunos cálculos científicos.

El segundo punto es que alguien sugirió TYPE_PROXIMITY sensor TYPE_PROXIMITY , pero no está destinado a servir a este propósito. Celulares actuales, mide la proximidad de un objeto en cm en relación con la pantalla de visualización de un dispositivo. Este sensor suele utilizarse para determinar si un auricular está sujeto al oído de una persona.

Otra posibilidad menor es usar el sensor de ubicación, puede identificar las coordenadas en relación con las coordenadas de su dispositivo, se comunica entre las coordenadas de cada dispositivo con el host utilizando NFC. Pero el problema es que su caso de uso dice que esos dispositivos están muy cerca uno del otro, por lo que no es una distancia mensurable utilizando el servicio de ubicación.

Para concluir, no es posible identificar el número de cada dispositivo de cada lado de un dispositivo host, con el hardware móvil actual. Se puede archivar mediante el uso de sensor externo que se extiende la capacidad móvil. Por ejemplo, una caja del teléfono que equipado con tal capacidad, esto abrirá la ventana a otros casos de uso ya la aplicación también.

Creo que una manera, pero puede requerir un poco de trabajo. Primero compruebe si dos dispositivos están colocados por obtener la orientación del dispositivo y utilizando acelerómetro o vector de rotación para comprobar el tono, rollo, etc

Cuando esté seguro de que están poniendo enviar datos de un dispositivo de uno a otro utilizando BT o wifi. Los datos deben incluir el tiempo de envío. Compruebe el tiempo de recuperación en otro dispositivo también debe comprobar la latencia para enviar y recuperar datos. Si usted puede tener un noticible diferencias de tiempo en ms para las diferencias de distancia pequeña entre los dispositivos que sería fácil comprobar lo cerca que están cerca. También puede pedir a los usuarios que mantenga su dispositivo 1 metro o distancia fija entre sí para obtener un tiempo de viaje para BT o señal wifi enviar a otro.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.