Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c CoreBluetooth--设备锁定时发现可扩展外围设备_Objective C_Background Process_Core Bluetooth - Fatal编程技术网

Objective c CoreBluetooth--设备锁定时发现可扩展外围设备

Objective c CoreBluetooth--设备锁定时发现可扩展外围设备,objective-c,background-process,core-bluetooth,Objective C,Background Process,Core Bluetooth,我注意到,当设备在后台时,与在后台+锁定时相比,发现可编程外围设备的行为(在中央侧)似乎有所不同 有人能证实这一点或向我提供更多信息/文档吗 更具体地说,当我的应用程序(central)转换到后台和主屏幕时,它会继续按预期查找外围设备,但当我按下睡眠/唤醒按钮并锁定设备时,它会停止查找我的外围设备。应用程序没有崩溃或其他任何问题。。。事实上,当我解锁设备(回到主屏幕)时,它会继续发现外围设备,而无需将其带回前台。我也明白,BLE在后台触发的频率较低,但就我而言,我在锁定状态下观察了一个多小时,

我注意到,当设备在后台时,与在后台+锁定时相比,发现可编程外围设备的行为(在中央侧)似乎有所不同

有人能证实这一点或向我提供更多信息/文档吗


更具体地说,当我的应用程序(central)转换到后台和主屏幕时,它会继续按预期查找外围设备,但当我按下睡眠/唤醒按钮并锁定设备时,它会停止查找我的外围设备。应用程序没有崩溃或其他任何问题。。。事实上,当我解锁设备(回到主屏幕)时,它会继续发现外围设备,而无需将其带回前台。我也明白,BLE在后台触发的频率较低,但就我而言,我在锁定状态下观察了一个多小时,它从未触发过发现,但一旦解锁,它就会恢复正常

我正在寻找一种解决方案,当设备(作为中央设备运行)被锁定时,我还能够发现外围设备

谢谢你的帮助

-H

更新…

找到一个有趣的帖子,我想与大家分享:

特别是布莱恩·福吉的观察结果很有趣

  • 被锁定的扫描设备不会报告任何也被锁定的iOS外围设备

  • 在某些设备上,如iPhone5和5S,您只需按下外围设备上的home(主页)按钮,扫描仪就可以正常工作 要报告的外围设备

  • 在其他设备上,如iPad和iPodtouch,您必须按下home(主页)按钮并解锁外围设备,扫描仪才能正常工作 要报告的外围设备

  • 非iOS设备(如rMBP)可以扫描后台锁定的iOS外围设备

  • 当iOS设备处于后台并锁定时,所有iOS设备都可以扫描硬件外围设备(如健康跟踪器)


好吧,我也遇到了同样的问题,并设法理解了原因。因此,基本上,当你在后台或设备锁定时,你的应用程序只能发现一个设备一次(你可以在前台使用CBCentralManagerScanOptionAllowDuplicatesKey标志进行多个发现,但在后台是忽略)

因此,我的应用程序在后台时发现任何可编程外围设备都没有问题,但我一锁定设备就无法检测到它们。我发现外围设备的广播数据包太大(发送了两次)。减少外围广播数据包似乎可以解决问题。锁定后,iPhone似乎可以一次性收听发送的广告包。在前台或后台,它能够监听2次发送的数据包


希望这能帮助别人。

是的,它的行为不同。在后台,它的速度明显减慢,并且最多只发现一次外围设备(过滤掉额外的回调)。发现外围设备很棘手。回答中给出的一些细节:在网上搜索这个用例。它被很好地记录下来,但是以“分布式方式”:@allprog-hi!谢谢你的评论。是的,我看过这些和类似的帖子,但我特别好奇“背景”和“背景+锁定”之间的区别。我在网上发现了一个有趣的对话,并将其添加到我的帖子中。bacground操作的问题主要来自以下几个因素:1。找到的重复外围设备总是被过滤掉,2。中心必须使用服务筛选进行扫描,3。iOS外围设备在后台时从广告包中删除广告服务。我还无法确认锁定/解锁的差异。如果能得到证据证明它是按照你所描述的方式工作,那就太好了。最近也有人报告了,但我没有。杰普。。。我认为所有提到的事情…实际上,你具体的问题是什么?)嗨,M,谢谢你的意见。是的,我注意到发送的详细信息量因应用程序状态而异。我基本上与CoreBL并行使用,并期待着WWDC/iOS8。但是既然你提到了。。。当我有时间的时候,我可能会回去再看一眼。谢谢!我仍在调查这个问题,但不幸的是,我还没有找到一个好办法来解决它。基本上,如果以可发现模式(每20毫秒)进行广播,在设备锁定的情况下,检测设备可能至少需要一分钟。我将广播间隔更新为1秒,可能需要10秒到数小时才能检测到。所以我还没有找到一种在合理的广告时间内用锁定设备检测外设的方法。我希望iOS 8能改善这种行为。。。