寻找触手可及的通用蓝牙设备

时间:2011-06-29 11:51:51

标签: ios iphone ios5 ios4 bluetooth

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

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

不幸的是,它只返回已经配对的设备,这不是我们想要的。使用connectingDevices代替pairedDevices并不会返回任何设备。那么,我们有什么选择可以检测到触手可及的任何蓝牙设备?我不认为我可以使用GameKit,因为我想发现非iOS设备。

欢迎任何建议。

4 个答案:

答案 0 :(得分:3)

我一直在搞乱私有框架几天,获取附近设备列表非常简单。

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

[[BluetoothManager sharedInstance] setDeviceScanningEnabled:YES];

如果范围内有设备,则会开始向通知中心发布 BluetoothDeviceDiscoveredNotification 通知。订阅这些并且传递给回调的NSNotification中的对象将是 BluetoothDevice * 类型。

我确定BluetoothManager会将所有已发现的设备存储在某处,但我只是将所有设备都放入了我自己的NSMutableArray中。

不幸的是,我仍然没有弄清楚如何使用私有API实际配对设备。

答案 1 :(得分:3)

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

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

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

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

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

祝你好运!

答案 2 :(得分:-2)

为什么不使用公开的Game Kit框架,而不是使用专用的BluetoothManager框架,该框架公开了几种支持检测和检测的方法。通过蓝牙连接两个设备并在它们之间交换数据(并且它不仅限于在游戏中使用,尽管名称

有一个非常全面的教程here

您可以使用内置的GKPeerPickerController,也可以使用以下内容自行管理

// 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

当新同伴使用相同的会话ID通告自己时,将调用此状态并且其状态应为

GKPeerStateAvailable

答案 3 :(得分:-2)

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