Conexión a un puerto bluetooth específico en un dispositivo bluetooth mediante Android
¿Hay alguna forma de que Android se conecte a un dispositivo Bluetooth utilizando un puerto específico en lugar de usar UUID de servicio? Sé que esta opción está disponible en otras plataformas que proporcionan soporte Bluetooth (por ejemplo, Java ME especificando una URL de estilo "btspp: //").
¡Gracias!
- ¿Cómo manejas los registros de antememoria de caché en la aplicación para móviles
- Actualizar el contenido de las pestañas de Android Sherlock
- Layout borroso / de baja calidad cuando jQuery móvil en android usando phonegap
- Google Analytics en Android
- Llamada de teléfono móvil o mailto no funciona en absoluto
- Portales de aplicaciones móviles centralizados y descentralizados
- Abrir desplegable desde javascript
- ¿Cómo se simula la memoria baja en el emulador de Android?
- .NET Framework en Android
- Cómo crear un Webapp para iOS, Android, BBerry, Symbian
- ¿Qué necesito saber para hacer que mi sitio web funcione en dispositivos móviles hoy en día?
- La geolocalización del teléfono no funciona
- ¿Cuáles son las ventajas del lenguaje de programación Kotlin?
Ok, ha sido un tiempo, pero he encontrado una solución al problema. En realidad, tenía la intención de renunciar y utilizar UUID, pero seguí recibiendo una excepción de Service Discovery Failed (IO), y cuando traté de encontrar una solución al problema de descubrimiento de servicio, encontré la solución a mi pregunta original … Ain ' t algo de vida
De todos modos, este es el enlace que encontré , aunque debe tener en cuenta que hay un error en la respuesta (que en realidad simplemente conectado al puerto 1, en lugar de utilizar un servicio UUID).
Y después de esta breve lección de historia, aquí está la solución:
Mediante la reflexión, es posible crear el socket Rfcomm que se conecta a un número de puerto en lugar de UUID:
int bt_port_to_connect = 5; // just an example, could be any port number you wish BluetoothDevice device = ... ; // get the bluetooth device (eg, using bt discovery) BluetoothSocket deviceSocket = null; ... // IMPORTANT: we create a reference to the 'createInsecureRfcommSocket' method // and not(!) to the 'createInsecureRfcommSocketToServiceRecord' (which is what the // android SDK documentation publishes Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); deviceSocket = (BluetoothSocket) m.invoke(device,bt_port_to_connect);
Algunas cosas a notar:
- ya que estamos utilizando Invoke, el primer parámetro es el objeto en el que invocamos el método, el segundo parámetro de invoke es en realidad el primer parámetro de la función)
- También hay una versión segura disponible ('createRfcommSocket'), que acepta un número de canal bluetooth como un solo parámetro (de nuevo, ya que se invoca estilo, necesitará pasar el objeto para invocar el método, como se menciona en – 1-)
- He encontrado lo que parece ser un enlace a los prototipos de estas funciones
Buena suerte a todos.
Las conexiones Bluetooth para Android se realizan exclusivamente a través de UUID. Cada dispositivo Bluetooth tiene un UUID para cada servicio que ejecuta (consulte Bluetooth SDP).
Acaba de darle a Android el UUID para que lo vea y, en modo cliente, encontrará un zócalo para conectarse automáticamente (incluido el puerto). En el modo servidor, esperará a que el dispositivo especificado inicie una conexión utilizando el UUID especificado. El objeto BluetoothSocket también es válido cuando se establece la conexión (use getInput / Output Stream) Consulte la documentación de Server Socket y la documentación de Client Socket .
Si realmente quieres comprobar todo, puedes ver lo que Android decodifica desde el SDP del otro dispositivo y el UUID que proporcionaste.
Utilice este tutorial para obtener la interfaz Bluetooth (muy fácil de hacer). Entonces el código debería ser algo como esto:
IBluetooth ib =getIBluetooth(); Int otherDevicePort = ib.getRemoteServiceChannel(otherDeviceAddress, UUID);