我很困惑......我的意思是让我们说在用户选择他想要配对的设备后,我的应用程序如何找到相同的应用程序并发送字符串数据???然后,一旦发送数据,接收事件的API是什么?
一个简单的示例代码将完全帮助我! (请不要参考Google的蓝牙聊天示例,他们使用的设计模式我还不熟悉。)
答案 0 :(得分:1)
好的,我会尝试尽可能简单地解释事情。
我们假设您使用RFCOMM频道进行两个Android设备之间的通信。
一台设备将充当服务器,另一台设备将充当客户端。
public BluetoothServerSocket listenUsingRfcommWithServiceRecord(String name,UUID uuid)
其中name
是您的应用服务名称(选择任意),而uuid
也是您选择的java.util.UUID
(here you have an online generator)。 不要忘记UUID 。
public BluetoothSocket accept(); //添加超时参数的可能性
注意:这是一个阻塞调用,这意味着运行此代码的线程将阻塞并等待方法accept()
返回。它仅在客户端应用程序连接到服务器应用程序时返回。如果您想要永久阻止(或者只要您的应用程序正在运行),请使用timeout参数。由于它是阻止调用,不在您的UI线程上调用,因此会导致 ANR (Application Not Responding)。而是使用Thread。
有两种情况:您的Android设备是配对的,要么不是。 最简单的方法是通过“设置”手动配对两台设备,但除非您希望获得完美的应用用户体验,否则请使用the discovery & binding operation。
现在连接到服务器:
public BluetoothSocket createRfcommSocketToServiceRecord(UUID uuid);
public void connect(); //来自返回的BluetoothSocket
UUID 是您在服务器应用程序中使用的那个。
注意:再次,connect()
是阻塞调用,但由于存在内部超时参数,因此不会永久阻止。 从另一个主题调用它。
BluetoothSocket
的 outputStream 和 inputStream (服务器和客户端都获得套接字)。了解Stream和Bytes的指南:http://fr.slideshare.net/shahjahan786/understanding-java-streams。
那就是它。您可以使用所有基本元素在您的应用上工作,并在两个设备之间建立蓝牙连接,以便您可以交换数据。