Android蓝牙接受()/ connect()与已配对的设备

我无法通过蓝牙连接两台 Android设备,只有在之前配对时才会发生.我正在运行一个作为服务器,另一个作为客户端.

以下是服务器端的一系列事项:

>检查各种蓝牙状态(适配器可用,已启用等).
>使用我选择的预定义UUID调用listenUsingRfcommWithServiceRecord().
>请求使设备可被发现
>由于可被发现异步发生,我调用accept()并等待传入​​连接.

在客户端:

>检查各种蓝牙状态(适配器可用,已启用等).
>对于getBondedDevices()中的每个设备,我将getName()与服务器名称进行比较.如果匹配,请跳至步骤6.
>开始BT发现
>对于每个已发现的设备(请注意,2a中的配对设备未显示在此处),请将设备名称与服务器名称进行比较.如果匹配,请转到步骤6.
>取消发现
>在从步骤2找到的设备上,使用服务器端使用的相同预定义UUID调用createRfcommSocketToServiceRecord().
>调用connect()并等待它返回连接的套接字.

当客户端和服务器之前从未配对时,上述过程对我来说非常好.但是,Android在设备列表中注册后,它们将不可避免地在connect()/ accept()阶段超时.

我一直在寻找解决方案几天,并尝试了很多东西,包括这个:
Connecting to a already paired Bluetooth device

反射方法对我也不起作用.似乎connect()会立即返回,但是当我尝试getOutputStream()时,我得到一个异常.在accept()方面,它甚至没有注册有人试图连接.我认真地需要一些帮助或指针来让设备在之前配对后建立连接.

以下是有关设备的一些信息:

>我正在测试两台LG G2X手机上的服务器和客户端.
>它们都运行在Android 2.3.3上,对应于API级别10.
>再次,上述工作在我在设置中手动取消配对后工作.

提前谢谢你.我在Android和蓝牙方面大约有两周的时间,所以如果您发现任何缺失的步骤或最佳做法,请同时指出它们.

解决方法

在我尝试连接到绑定设备的客户端中,我只是在BluetoothAdapter.getBondedDevices()中找到的BluetoothDevice上调用它.这不起作用.

为了正确建立蓝牙连接,我必须做一些类似于下面的伪代码:

BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices();
BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress());

BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID);
socket.connect();

我完全按照蓝牙聊天示例得到了这个答案:Bluetooth Chat Service.为什么它从getBondedDevices()无法在设备上运行超出我的范围.也许对Android有更多了解的人可以回答这个问题.

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...