我一直在构建一个使用iOS 5.0中的BluetoothManager私有框架检测附近蓝牙设备的最小示例。
使用此问题中的答案:Finding generic Bluetooth devices within reach
这是我的viewDidLoad方法,用于注册BluetoothAvailabilityChangedNotification。我也注册了BluetoothDeviceDiscoveredNotification。
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(bluetoothAvailabilityChanged:)
name:@"BluetoothAvailabilityChangedNotification"
object:nil];
btCont = [BluetoothManager sharedInstance];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(deviceDiscovered:)
name:@"BluetoothDeviceDiscoveredNotification"
object:nil];
当我收到蓝牙可用性更改通知时,我会启用设备扫描,如上述链接中的一个答案中所述。
- (void)bluetoothAvailabilityChanged:(NSNotification *)notification
{
NSLog(@"BT State: %d", [btCont enabled]);
[btCont setDeviceScanningEnabled:YES];
}
为了完整性,这里是deviceDiscovered通知方法。
- (void)deviceDiscovered:(NSNotification *) notification
{
NSLog(@"Discovered one!");
}
运行测试应用程序生成的日志如下:
BTM: attaching to BTServer
BTM: posting notification BluetoothAvailabilityChangedNotification
BT State: 1
BTM: setting device scanning enabled
不幸的是,手机根本没有拿起任何蓝牙设备,即使我知道有近似的可发现设备(使用Android设备验证)。
我已经尝试过的一些事情:
任何想法都会非常感激。 谢谢!
答案 0 :(得分:2)
据我所知,蓝牙管理器在操作系统筛选结果后获取列表。 您只能获得附近的耳机设备,而不是所有通用设备。
你必须使用scanForServices:
// start scan
[btManager setDeviceScanningEnabled:YES];
[btManager scanForServices:0xFFFFFFFF];
答案 1 :(得分:0)
以下是一种方法:http://www.pocketmagic.net/?p=2827
发现的设备通知是指向BluetoothDevice对象的指针。