Error de transmisión de datos mediante SPP sobre Bluetooth en Android
He tenido un problema con la integridad de los datos utilizando un socket RFCOMM sobre Bluetooth en Android. No tengo ningún problema en la conexión, pero los datos que recibo son ilegibles y no los mismos que los datos que se envían. Los datos son enviados por un dispositivo RS232 a través de un adaptador Bluetooth al que se conecta el teléfono. No hay ningún problema con el adaptador, ya que los datos se reciben correctamente si me conecto con un ordenador portátil.
Mi conexión Bluetooth se maneja con base en la aplicación de ejemplo de BluetoothChat que se encuentra en el sitio de desarrolladores de Android ( http://developer.android.com/resources/samples/BluetoothChat/index.html ), sin cambios. Los datos que se envían son texto sin formato y caracteres de control (que se eliminan antes de mostrar al usuario). El problema específico que tengo es que algo del texto falta, algo de él se repite, el etc. Lo curioso es si conecto con una computadora con una aplicación terminal y mecanografíe adentro allí, los datos se transmiten muy bien. Además, si me conecto al dispositivo usando la aplicación GetBlue los datos se reciben bien.
- IOS a Android Bluetooth RFCOMM
- Aplicación de congelación de socket Android Bluetooth
- Android Bluetooth IOException: conexión rechazada
- Conexión Bluetooth RFCOMM / SDP a un adaptador RS232 en android
- Cómo evitar la conexión Bluetooth RFCOMM de morir inmediatamente después de .connect ()?
Así que supongo que el problema es lo que hace GetBlue posiblemente hacer diferente para manejar su transferencia de datos Bluetooth, o hay otra forma de recibir datos Bluetooth a través de un socket RFCOMM en Android?
- El conector Bluetooth de Android se bloquea
- La conexión Bluetooth RFCOMM no se pudo establecer consecutivamente en Android 4.2
- ¿Cómo crear un socket Android RFCOMM sin ninguna entrada del usuario?
- Comunicación Bluetooth basada en RFCOMM entre dos dispositivos Android
- ¿Cuándo android muestra un diálogo de emparejamiento al usar zócalos inseguros del bluetooth de RFCOMM?
- Android Bluetooth: El software causó la interrupción de conexión IOException?
- Android: conexión a varios dispositivos bluetooth sin emparejamiento
- Android Bluetooth Serial / RFCOMM / SPP, ¿Cómo cambiar el BAUD RATE?
La solución para la solución era crear la cadena en el subproceso conectado, directamente después de llamar a read () en InputStream y, a continuación, pasar la cadena de nuevo al subproceso principal para mostrar. Por cualquier razón, el paso de la matriz de bytes entre los hilos llevó a la repetición significativa y la pérdida de datos.
Código run () modificado:
public void run() { byte[] buffer = new byte[256]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) { try { // Read from the InputStream bytes = mmInStream.read(buffer); String readMessage = new String(buffer, 0, bytes); // Send the obtained bytes to the UI Activity mHandler.obtainMessage(MESSAGE_READ, bytes, -1, readMessage) .sendToTarget(); } catch (IOException e) { break; } } }
Y la recepción del manejador:
case MESSAGE_READ: // Read in string from message, display to mainText for user String readMessage = (String) msg.obj; if (msg.arg1 > 0) { mainText.append(readMessage); }
Este error se debe a que la referencia de objeto se pasa a la interfaz de usuario, si copia la matriz de bytes (búfer) a otra matriz de bytes que funciona.
- Causa de "Esta aplicación contiene código que intenta omitir las protecciones de seguridad de Android"
- Archivos duplicados copiados en APK META-INF / maven / com.squareup / otto / pom.xml