Bluetoothchat no funciona -- android campo con bluetooth camp Relacionados El problema

BluetoothChat doesn't work


2
vote

problema

Español

Hola, quiero hacer conversación entre dispositivos Android. Utilizo BluetoothChat para hacer esto, pero no funciona, no puedo leer datos correctamente de otro dispositivo.

conversación es:

yo: Privet

Dispositivo: P Dispositivo: Rivet

¿Puedes ayudarme?

Clase privada con conexión extiende el hilo {

      private final InputStream mmInStream;     private final OutputStream mmOutStream;      public ConnectedThread(BluetoothSocket socket) {         Log.d(TAG, "create ConnectedThread");         mmSocket = socket;         //InputStream tmpIn = null;         OutputStream tmpOut = null;         BufferedInputStream tmpIn=null;          int INPUT_BUFFER_SIZE=32;         // Get the BluetoothSocket input and output streams         try {             //tmpIn = socket.getInputStream();             tmpOut = socket.getOutputStream();             tmpIn = new BufferedInputStream(socket.getInputStream(),INPUT_BUFFER_SIZE);          } catch (IOException e) {             Log.e(TAG, "temp sockets not created", e);         }          mmInStream = tmpIn;         mmOutStream = tmpOut;     }      public void run() {         Log.i(TAG, "BEGIN mConnectedThread");         byte[] buffer = new byte[1024];         int bytes;          // Keep listening to the InputStream while connected         while (true) {             try {                 // Read from the InputStream                bytes = mmInStream.read(buffer);                 // Send the obtained bytes to the UI Activity                 mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)                         .sendToTarget();             } catch (IOException e) {                 Log.e(TAG, "disconnected", e);                 connectionLost();                 break;             }         }     }   
Original en ingles

Hello I want to make conversation between android devices. I use BluetoothChat to do this but it doesn't work I can't read correctly data from another device.

Conversation is :

Me: privet

Device: p Device: rivet

Can you help me?

private class ConnectedThread extends Thread {

    private final InputStream mmInStream;     private final OutputStream mmOutStream;      public ConnectedThread(BluetoothSocket socket) {         Log.d(TAG, "create ConnectedThread");         mmSocket = socket;         //InputStream tmpIn = null;         OutputStream tmpOut = null;         BufferedInputStream tmpIn=null;          int INPUT_BUFFER_SIZE=32;         // Get the BluetoothSocket input and output streams         try {             //tmpIn = socket.getInputStream();             tmpOut = socket.getOutputStream();             tmpIn = new BufferedInputStream(socket.getInputStream(),INPUT_BUFFER_SIZE);          } catch (IOException e) {             Log.e(TAG, "temp sockets not created", e);         }          mmInStream = tmpIn;         mmOutStream = tmpOut;     }      public void run() {         Log.i(TAG, "BEGIN mConnectedThread");         byte[] buffer = new byte[1024];         int bytes;          // Keep listening to the InputStream while connected         while (true) {             try {                 // Read from the InputStream                bytes = mmInStream.read(buffer);                 // Send the obtained bytes to the UI Activity                 mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)                         .sendToTarget();             } catch (IOException e) {                 Log.e(TAG, "disconnected", e);                 connectionLost();                 break;             }         }     } 
</div
     
   
   

Lista de respuestas

1
 
vote

La solución para la solución fue crear la cadena en la rosca conectada, directamente después de llamar a leer () en la entrada de entrada, y luego pasar la cadena de nuevo al hilo principal para mostrar. Por cualquier motivo, pasar la matriz de bytes entre hilos llevó a una repetición significativa y pérdida de datos.

Código de ejecución modificada ():

  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);         }   
 

The fix for the solution was to create the string in the connected thread, directly after calling read() on the InputStream, and then passing the string back to the main thread for display. For whatever reason, passing the byte array between threads led to significant repetition and data loss.

Modified run() code:

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;         }     } } 

And the handler reception:

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);         } 
</div
 
 

Relacionados problema

2  Bluetoothchat no funciona  ( Bluetoothchat doesnt work ) 
Hola, quiero hacer conversación entre dispositivos Android. Utilizo BluetoothChat para hacer esto, pero no funciona, no puedo leer datos correctamente de otro...

2  Imprimir datos de la aplicación Android mediante la impresora Bluetooth  ( Print data from android app using bluetooth printer ) 
Estoy desarrollando una aplicación de Android para restaurante. Quiero imprimir la factura después de ordenar de mi aplicación. Estoy usando la impresora Blue...

5  Leer datos de Wii-Balardboard  ( Read data from wii balanceboard ) 
Estoy tratando de obtener la salida de un ajuste de Wii (placa de balance). Puedo encontrar el dispositivo a través de los enumeradores Bluetooth C ++, pero l...

10  HTML5 Bluetooth y audio  ( Html5 bluetooth and audio ) 
HTML 5 Menciona Bluetooth y Audio. Pero no hay detalles sobre Bluetooth. Estoy tratando de conectarme a un dispositivo Bluetooth que transmite audio. ¿H...

18  ¿Programativamente enciende Bluetooth en el iPhone SDK?  ( Programmatically turn on bluetooth in the iphone sdk ) 
He visto muchas preguntas sobre esto, pero nadie realmente da una respuesta real (marcos para importar, código real, etc.). Solo dicen con una API privada y q...

0  Escribe mensaje de 8 bits  ( Write 8 bit message ) 
Tengo que enviar un byte a través de Bluetooth, el problema es que no puedo usar este script porque tengo que escribir el número que es mayor que 127: mCha...

9  iPhone: ¿Cuáles son las técnicas más útiles para Bluetooth más rápido?  ( Iphone which are the most useful techniques for faster bluetooth ) 
Estoy agregando Bluetooth de igual a igual usando GameKit a un disparos para iPhone, por lo que la velocidad es vital. Estoy enviando alrededor de 40 mensajes...

2  Enviar comandos PCL a la impresora Bluetooth  ( Send pcl commands to bluetooth printer ) 
Hago la aplicación de Android, que enviará comandos de PCL a la impresora BT ( HP Officejet 100 ). El problema es cuando envío la impresora de datos de cadena...

0  Flutter: Cancelar la función después de la primera declaración de retorno  ( Flutter cancel function after first return statement ) 
Estoy tratando de programar una aplicación Bluetooth con Flutter_Blue que solo dejará de buscar dispositivos si se encuentra un dispositivo específico con el ...

1  Descubrimiento de servicio J2ME y descubrible al mismo tiempo  ( J2me service discovery and discoverable same time ) 
Intento escribir una aplicación simple de cliente / servidor (toda la aplicación es un servicio y un cliente de Bluetooth). El código del cliente encuentra lo...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos