寻找范围内的通用蓝牙设备

我们正在使用iOS专用框架BluetoothManager进行一个简单的实验 – find可触及的通用 (非iOS)BT设备。 现在,只有以下行返回设备:

for(BluetoothDevice* device in [[BluetoothManager sharedInstance] pairedDevices])

不幸的是,它只返回已经配对的设备,这不是我们想要的。 使用connectingDevices而不是pairedDevices根本不返回任何设备。 那么,我们有什么select能够检测到任何可触及的蓝牙设备? 我不认为我可以使用GameKit,因为我想发现非iOS设备。

任何build议,欢迎。

我一直在私人框架搞了几天,获取附近设备列表是相当简单的。

首先,您必须使用以下方法启用设备扫描:

 [[BluetoothManager sharedInstance] setDeviceScanningEnabled:YES]; 

如果范围内有设备,则会开始向通知中心发送BluetoothDeviceDiscoveredNotification通知。 订阅这些,NSNotification中传递给callback的对象将是BluetoothDevice *types。

我敢肯定,BluetoothManager存储任何发现的设备,但我只是把所有东西都扔进我自己的NSMutableArray。

不幸的是,我仍然没有想出如何真正与使用私有API的设备配对。

您需要使用BluetoothManager打开蓝牙,然后启用蓝牙扫描远程设备。

注册通知callback后,您将获得发现的设备。 通知对象实际上是指向BluetoothDevice对象的指针。

获取BluetoothDevice对象指针,然后从那里获取名称,地址或连接到远程设备。

这里没有RSSI,您可以通过查看BluetoothDevice.h文件来查看完整的方法列表。

我写了一个完整的示例,兼容iOS 5.1,在这里: http : //www.pocketmagic.net/?p=2827

祝你好运!

作为GameKit框架的一部分的GKSession类是您正在寻找的,因为它提供了使用蓝牙发现并连接到附近的iOS设备的能力。

为什么不使用专用的蓝牙pipe理器框架,为什么不使用公开的游戏套件框架,它暴露了几种方法来支持通过蓝牙检测和连接两个设备并在它们之间交换数据( 并不限于只用于游戏(尽pipe它的名字

这里有一个非常全面的教程。

您可以使用内置的GKPeerPickerController,或者使用以下方法自行pipe理它

 // create a session on each of your devices GKSession *session = [[GKSession alloc] initWithSessionID:@"uniqueSessionID" displayName:@"deviceDisplayName" sessionMode:GKSessionModePeer // set the delegate on the session session.delegate = self; 

请确保在所有设备上使用相同的会话ID,但要使该设备的名称唯一

然后执行下面的委托方法

 - (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state 

当新的对等体使用相同的会话标识自己做广告时,这将被调用并且它们的状态应该是

 GKPeerStateAvailable