2011-11-20 66 views
7

我正在尋找Android上的藍牙示例代碼來做非阻塞套接字通信。Android的藍牙插座教程無阻塞通信

我發現了幾個例子,像BluetoothChat或BluetoothSocket.java但都不是non-blocking socket communication.

PS不會自動無阻塞的意思就是必須是異步的?我認爲其實不是 - 它是不一樣的,我認爲我可以做超時同步套接字通信。這就是我正在尋找的...樣的榜樣

非常感謝您

+0

我在找同樣的東西,如果你找到解決方案請更新答案,我會做同樣的! – morty346

回答

11

貌似答案是幾乎不能

但是有位穿魔法的,你可以有系統的工作方式你想

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

消息系統

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

插座聽衆

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

我應該提到這是「專業Android 2應用程序開發」作者:Reto Meier – morty346

+1

僅供參考,我實際上實現了非阻塞並使用兩個獨立的定時器自行超時。有一次,如果它在最短時間內沒有收到任何東西,並且第二個定時器用於定義循環等待數據的最長時間,則存在等待的BT循環。這樣我終於可以控制溝通 – user387184