Учебник по Android Bluetooth для неблокируемой связи - PullRequest
8 голосов
/ 21 ноября 2011

Я ищу пример кода Bluetooth на Android для неблокирующей связи через сокет.

Я нашел несколько примеров, таких как BluetoothChat или BluetoothSocket.java, но ни один из них не является non-blocking socket communication.

ps означает ли неблокирование автоматически, что должно быть асинхронным?Я думаю, на самом деле нет - это не то же самое, я предполагаю, что я мог бы сделать синхронную связь через сокет с таймаутом.Вот такой пример я ищу ...

Большое спасибо

1 Ответ

12 голосов
/ 21 ноября 2011

Похоже, что ответ в значительной степени вы не можете

однако, с небольшим количеством магии потоков, ваша система может работать так, как вы хотите

   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());
  } 
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...