6

当我使用 iOS 蓝牙时,代码如下:

static NSString * const kServiceUUID = @"1802";
[self.manager scanForPeripheralsWithServices:@[ [CBUUID UUIDWithString:kServiceUUID] ] options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @NO }];

为什么没有回应?我在方法 scanForPeripheralsWithServices 中尝试了各种参数对我检查了这个问题: 如何获取可用蓝牙设备的列表?

我的设备是带有 iOS 6 的 iPod touch 5(越狱)。我已经测试了一些蓝牙 4.0 设备。谁能告诉我为什么?

4

3 回答 3

7

使用服务进行扫描nil以检查您正在寻找的外围设备是否确实在宣传任何内容。调用时centralManager:didDiscoverPeripheral:advertisementData:RSSI:,检查广告数据。简直NSLog()了。如果 0x1802 不在其中,则外围设备不会宣传此服务,扫描仪不会以这种方式找到它。要更正此问题,请在广告设置中包含该服务:

NSDictionary *advData = 
 @{CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:@"1802"]]};
[peripheralManager startAdvertising:advData];
于 2013-08-19T21:28:43.060 回答
1

您是否登录了广告 iOS 设备,它实际上是在广告即时警报服务(1802)?peripheralManagerDidStartAdvertising:您可以在 CBPeripheralManagerDelegate回调中将其打印出来。您也可以在前台使用这两个应用程序扫描 nil 并查看广告数据以进行验证。同样,如果它是专用的 ble 外围设备,则对在前台运行中央管理器的设备执行相同操作。如果您仍然看不到外围设备(并且您无权访问此外围设备的固件),也许可以购买 TI 数据包嗅探器以查看所有数据包的传递。

于 2013-08-19T19:17:12.210 回答
1

谢谢你千百次,但我不得不说对不起。然后我用另一个蓝牙 4.0 LE 设备测试了我的代码。有用!这意味着我以前的蓝牙 4.0 设备不是 LE 版本。他们告诉我错误的事情!谢谢你,对浪费你的时间表示抱歉。

于 2013-08-20T01:45:54.190 回答