android程序能否同时连接2个蓝牙设备并接收两方数据? 我是Android新手,请高手指点。qq:375326671

2025-05-24 09:48:40
推荐回答(2个)
回答1:

  当然可以的。
  参考的资料已经发到你的q邮件里去了。这个是第6页里摘出来的。你看看吧,应该对你很有帮助的。因为这个文档也帮助过我。望采纳哈~~~

  当你想要连接两台设备时,一个必须作为服务端(通过持有一个打开的bluetoothserversocket),目的是监听外来连接请求,当监听到以后提供一个连接上的bluetoothsocket给客户端,当客户端从bluetoothserversocket得到bluetoothsocket以后就可以销毁bluetoothserversocket,除非你还想监听更多的连接请求。
  建立服务套接字和监听连接的基本步骤:
  首先通过调用listenUsingRfcommWithServiceRecord(String, UUID)方法来获取bluetoothserversocket对象,参数string代表了该服务的名称,UUID代表了和客户端连接的一个标识(128位格式的字符串ID,相当于pin码),UUID必须双方匹配才可以建立连接。其次调用accept()方法来监听可能到来的连接请求,当监听到以后,返回一个连接上的蓝牙套接字bluetoothsocket。最后,在监听到一个连接以后,需要调用close()方法来关闭监听程序。(一般蓝牙设备之间是点对点的传输)
  注意:accept()方法不应该放在主Acitvity里面,因为他是一种阻塞调用(在没有监听到连接请求之间程序就一直停在那里)。解决方法是新建一个线程来管理。例如:
  private class AcceptThread extends Thread {
  private final BluetoothServerSocket mmServerSocket;

  public AcceptThread() {
  // Use a temporary object that is later assigned to mmServerSocket,
  // because mmServerSocket is final
  BluetoothServerSocket tmp = null;
  try {
  // MY_UUID is the app's UUID string, also used by the client code
  tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
  } catch (IOException e) { }
  mmServerSocket = tmp;
  }

  public void run() {
  BluetoothSocket socket = null;
  // Keep listening until exception occurs or a socket is returned
  while (true) {
  try {
  socket = mmServerSocket.accept();
  } catch (IOException e) {
  break;
  }
  // If a connection was accepted
  if (socket != null) {
  // Do work to manage the connection (in a separate thread)
  manageConnectedSocket(socket);
  mmServerSocket.close();
  break;
  }
  }
  }

  /** Will cancel the listening socket, and cause the thread to finish */
  public void cancel() {
  try {
  mmServerSocket.close();
  } catch (IOException e) { }
  }
  }

回答2:

期待中。。。