¿Cómo crear Socket RFCOMM inseguro en Android?
bluetooth insecure-connection (3)
¿Has visto este createInsecureRfcommSocketToServiceRecord
Estoy buscando la manera de conectar a través de socket rfcomm inseguro. Pude encontrar el camino mencionado abajo
Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);
Esto por el momento está haciendo lo que quiero. Incluso la documentación de here dice que necesitamos usar createInsecureRfcommSocketToServiceRecord para conexiones inseguras. Pero no hay tal método. La única forma en que lo descubrí fue usando la reflexión como se muestra arriba. Y aun así, el método que se pasa en createInsecureRfcommSocket y no createInsecureRfcommSocketToServiceRecord. Solo quería saber qué tan confiable es de esta manera. Si menciono createInsecureRfcommSocketToServiceRecord en el método, la conexión nunca ocurre.
Bueno, la mayoría de las respuestas respondidas aquí son antes del 30 de marzo de 2011, en este post.
Mientras buscaba la solución de un problema similar en mi aplicación, encontré este blog escrito el 30 de marzo.
Ayudará a todos aquellos que todavía están buscando este problema en SO
http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/
La solución se ha vuelto muy simple ahora. Simplemente incluya InsecureBluetooth.java en su proyecto y cambie 2 líneas en BluetoothChatService.java.
tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true);
y
tmp = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true);
Eso es !
createInsecureRfcommSocketToServiceRecord()
se incluyó a partir del nivel 10 de la API de Android, por lo que la documentación lo alentará a usarla, ya que los documentos siempre siguen la última versión de la API. Si está apuntando a una API inferior a 10 (también conocida como 2.3.3 o Gingerbread), entonces ese método no es de acceso público para usted.
El método que está llamando a través de la reflexión createInsecureRfcommSocket()
es un método privado dentro del dispositivo BluetoothDevice
que ha estado presente desde aproximadamente Android 2.0. El problema con llamar a métodos ocultos es que no se garantiza que estén allí en todos los dispositivos o en el futuro ... por lo que estás apostando un poco. Supongo que su método probablemente funcionará la mayor parte del tiempo en la mayoría de los dispositivos 2.0+, ya que los servicios requeridos para implementar su primo público createRfcommSocketToServiceRecord()
son muy similares en la capa de pila.
En pocas palabras, si desea una compatibilidad universal garantizada con su implementación de Bluetooth, tendrá que apuntar a 2.3.3 (nivel de API 10) con su aplicación. Con una API pública ahora expuesta para RFCOMM inseguro, es difícil decir si es más o menos probable que la implementación privada subyacente cambie.