我们正在使用iOS私有框架BluetoothManager进行简单的实验 - 找到可触及的通用(非iOS)BT设备。现在,只有以下行返回设备:
for(BluetoothDevice* device in [[BluetoothManager sharedInstance] pairedDevices])
不幸的是,它只返回已经配对的设备,这不是我们想要的。使用connectingDevices
代替pairedDevices
并不会返回任何设备。那么,我们有什么选择可以检测到触手可及的任何蓝牙设备?我不认为我可以使用GameKit,因为我想发现非iOS设备。
欢迎任何建议。
答案 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设备的能力。