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.

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?

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.

  • Bluetooth Android RFCOMM / SPP sugerencias de manejo de errores
  • Android Bluetooth Serial RFCOMM velocidad baja en baudios / transmisión lenta
  • Recibir audio vía Bluetooth en Android
  • ¿Podría crear más de un canal RFCOMM por hora?
  • Conector de Bluetooth
  • Android detectar Bluetooth desconectar inmediatamente Máximo 2 segundos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.