2011-12-07 16 views
14

Estoy usando el chat bluetooth para conectarme y recibir datos desde un dispositivo bluetooth.Lectura de datos del dispositivo bluetooth en Android

uso el siguiente código para la lectura de datos:

public void run() { 
    byte[] buffer = new byte[1024]; 
    int bytes; 
    Log.v("MR", "start listening...."); 

    // Keep listening to the InputStream while connected 
    while (true) { 
     try { 
      // Read from the InputStream 
      Log.d("MR", "buffer in try"); 

      bytes = mmInStream.read(buffer); 
      Log.d("MR", "input stream :"+(new String(buffer))); 
      // Send the obtained bytes to the UI Activity 
      mHandler.obtainMessage(Conn.MESSAGE_READ, bytes, -1, buffer).sendToTarget(); 
      Log.d("MR", "buffer after"); 

     } catch (Exception e) { 
      Log.e("MR", "Error :"+e.getMessage()); 
      // 
      connectionLost(); 
      // break; 
     } 

     Log.d("MR", "buffer after while"); 
    } 
} 

El dispositivo está enviando datos todo el tiempo sin parar.

Con el código anterior consigo el mensaje de:

Log.d("MR", "buffer in try"); 

luego se va a la siguiente línea:

bytes=mmInStream.read(buffer); 

y nunca regresa de esa llamada. Supongo que esto se debe a que comienza a leer datos del dispositivo y no se detiene hasta que se desconecta. ¿Cómo puedo leer una cierta cantidad de bytes a la vez?

EDITAR

A no ser que se quede con el código bytes = mmInStream.read(buffer); debido a que Don; t obtener cualquier dato nuevo en el dispositivo?

+0

º problema podría no ser la certeza de que i havce de escritura en la parte superior. Creo que debe ser el puerto el que hace la comunicación. ¿Es posible que los dos dispositivos estén conectados, pero en el zócalo no se transmite nada, hay algo que va mal con la comunicación? – prokopis

+0

Upvotes sería lindo jaja ... espero que tengas cierto éxito – JPM

+0

teniendo exactamente el mismo problema –

Respuesta

13

En su lugar utilizo DataInputStreams ya que puede hacer un método readFully() que espera para leer un cierto número de bytes antes de regresar. Me configurar la conexión BT así:

BluetoothDevice btDevice = bta.getRemoteDevice(macAddress); 
BluetoothSocket btSocket = InsecureBluetooth.createRfcommSocketToServiceRecord(
        btDevice, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"), false); 

btSocket.connect(); 
InputStream input = btSocket.getInputStream(); 
DataInputStream dinput = new DataInputStream(input); 

continuación, más adelante, cuando quiero leer lo uso readFully:

dinput.readFully(byteArray, 0, byteArray.length); 
+0

el InsecureBluetooth. es una clase que tienes crear o es algo que tengo que importar o un contasnt porque no puedo encontrar nada? – prokopis

+1

Puede obtener InsecureBluetooth.java aquí ... http: //code.google.com/p/payforwarding/source/browse/trunk/source/Android/monac/src/jp/android_group/payforward/monac/bts/ InsecureBluetooth.java?r=103 – JPM

+0

lo he intentado y me conecto en el dispositivo. También uso bond state para verificar si se conecta y obtengo el código de retorno 12, lo que significa que está bien, pero aún no recibo datos del dispositivo en mi dispositivo Android. podría haber algún problema con el zócalo? – prokopis

Cuestiones relacionadas