2011-11-20 15 views
7

Busco a un código de ejemplo bluetooth en Android que hacer no bloquear la comunicación de socket.Android Bluetooth tutorial toma para la comunicación no bloqueante

he encontrado varios ejemplos, como el BluetoothChat o BluetoothSocket.java pero ninguno es non-blocking socket communication.

ps qué no bloqueo automáticamente significa que es tiene que ser asíncrona? Yo no creo en realidad - que no es lo mismo, supongo que podía hacer la comunicación sincrónica toma con un tiempo de espera. Esa es la clase de ejemplo Busco ...

muchas gracias

+0

Estoy buscando lo mismo y estoy vacío, si encuentra una solución, por favor actualice la respuesta, ¡haré lo mismo! – morty346

Respuesta

11

Parece que la respuesta es más o menos no se puede

sin embargo con un poco de enhebrar la magia, puede tener su su sistema funcione de la manera deseada

BluetoothSocketListener bsl = new BluetoothSocketListener(socket, handler, messageText); 
    Thread messageListener = new Thread(bsl); 
    messageListener.start(); 

sistema de mensajes

private class MessagePoster implements Runnable { 
    private TextView textView; 
    private String message; 

    public MessagePoster(TextView textView, String message) { 
     this.textView = textView; 
     this.message = message; 
    } 

    public void run() { 
     textView.setText(message); 
    }  
    } 

socket listener

private class BluetoothSocketListener implements Runnable { 

    private BluetoothSocket socket; 
    private TextView textView; 
    private Handler handler; 

    public BluetoothSocketListener(BluetoothSocket socket, 
           Handler handler, TextView textView) { 
    this.socket = socket; 
    this.textView = textView; 
    this.handler = handler; 
    } 

public void run() { 
    int bufferSize = 1024; 
    byte[] buffer = new byte[bufferSize];  
    try { 
    InputStream instream = socket.getInputStream(); 
    int bytesRead = -1; 
    String message = ""; 
    while (true) { 
     message = ""; 
     bytesRead = instream.read(buffer); 
     if (bytesRead != -1) { 
     while ((bytesRead==bufferSize)&&(buffer[bufferSize-1] != 0)) { 
      message = message + new String(buffer, 0, bytesRead); 
      bytesRead = instream.read(buffer); 
     } 
     message = message + new String(buffer, 0, bytesRead - 1); 

     handler.post(new MessagePoster(textView, message));    
     socket.getInputStream(); 
     } 
    } 
    } catch (IOException e) { 
    Log.d("BLUETOOTH_COMMS", e.getMessage()); 
    } 
} 
} 
+1

debería mencionar que esto es "Profesional 2 Android de desarrollo de aplicaciones" Por Reto Meier – morty346

+1

sólo para información, me llevan a la práctica no bloqueo y tiempo de espera de mí mismo usando dos contadores de tiempo separados. Una vez sólo existe el bucle BT espera si no recibe nada en un tiempo mínimo y el segundo temporizador se utiliza para definir el tiempo máximo que el bucle de espera datos. De esta manera, finalmente puedo controlar la comunicación – user387184

Cuestiones relacionadas