最小的iOS蓝牙示例

时间:2012-03-19 23:19:25

标签: iphone objective-c

我一直在构建一个使用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设备验证)。

我已经尝试过的一些事情:

  • 致电[btCont setPowered:YES];并注册相关的电源状态变化通知,在回调中执行setDeviceScanningEnabled:YES
  • 在setDeviceScanningEnabled调用之前调用[btCont resetDeviceScanning]
  • 调用scanForConnectableDevices :( unsigned int)arg1;方法,猜测arg1可能是某种超时值。我尝试了各种各样的价值但没有成功。

任何想法都会非常感激。 谢谢!

2 个答案:

答案 0 :(得分:2)

据我所知,蓝牙管理器在操作系统筛选结果后获取列表。  您只能获得附近的耳机设备,而不是所有通用设备。

你必须使用scanForServices:

    // start scan
    [btManager  setDeviceScanningEnabled:YES];
    [btManager scanForServices:0xFFFFFFFF];

答案 1 :(得分:0)

以下是一种方法:http://www.pocketmagic.net/?p=2827

发现的设备通知是指向BluetoothDevice对象的指针。