似乎没有人知道,所以我买了一个iOS开发者账户,并做了一些实验.这是我的发现:
在前台运行时,可以使用CBCentralManager::scanForPeripheralsWithServices.启动扫描您可以对广告特定服务的设备进行restricted次扫描,也可以对unrestricted次(该调用的参数为零)进行扫描.它也可以是allow或disallow duplicates;在前一种情况下,每当iPhone收到广告数据包时,您都会得到一个didDiscoverPeriphery回调;在后一种情况下,每个设备只会得到一个回调.
当您进入后台时,规则显示如下:
- 如果您运行的是unrestricted扫描,它将被自动取消.您不会得到任何didDiscover回调.
- 如果您的扫描值为restricted(即您指定了一个或多个要查找的服务UUID),则您的扫描将继续运行,但allow duplicates flag will be ignored.这意味着您现在将只获得new个设备的didDiscoverPeriphery回调.如果在前台看到了所有设备,您将不会收到任何回调.
- 启动和停止扫描does not重置哪些设备被认为是新设备.如果存在一个设备,您将只收到一个回调,即使在多次扫描中也是如此,除非.
- 如果您对某个设备执行connect次,然后是disconnect次,然后是scan again次,则将再次枚举该设备(即,您将再获得一次对didDiscoverPeriphery的调用).我猜iOS认为这是对这款设备"表现出了兴趣".
我不知道try 连接到不可连接的设备(例如,BLE广告商,就像那些实现邻近配置文件的设备)是否足够好,因为我的示例设备是可连接的.然而,至少对于可连接的设备而言,该扫描/连接/断开/扫描过程足以轮询设备在后台的存在.
以上结果是使用运行iOS 5.0.1的iPhone 4S收集的