我已经问过几次这个问题(here和here),但没有任何可用的回答,所以我现在要以另一种方式来问这个问题。
我需要什么
我需要能够唤醒我的应用程序,从我自己编程的蓝牙外围设备发送和接收一些数据。这是重要的数据,因为安全原因,所以我绝对需要应用程序醒来。然而,设备并不总是处于关机状态,因此我需要在外围设备打开/关闭时处理这个用例。要做到这一点,我需要使用iBeacon唤醒应用程序,向框发送命令,得到响应,然后进入连续交换模式。如果外围设备被关闭,我不在乎,只是当它被打开时,我需要连续的数据交换过程来重新启动。
问题
我试过所有建议的背景“应用程序可唤醒”的info.plist项目..。网络电话,背景音频,iBeacon和蓝牙didConnectPeripheral/didDisconnect委托方法,没有真正的工作非常可靠。有几天,我让iBeacon、didEnterRegion和didExitRegion方法在插入/拔掉我的设备时启动,所以至少有一些可靠的东西。
如果我使用iBeacon唤醒应用程序并连接到蓝牙,那么真正的问题就开始了(因为在iOS系统级别连接/配对之前,我无法与该框交换信息)。因为这个应用程序还没有与之配对,所以后台的命令中没有一条能到达方框。当这个进程在后台启动时,不会出现任何消息询问您是否愿意与此设备配对(当应用程序正在运行并且您可以配对时,这一切都工作得很好)。
而且,即使我有机会配对,我现在也会永久地连接/配对(我不希望用户每次插入设备和应用程序关闭时都按下“对”)。除非用户进入蓝牙设置并“忘记设备”,否则我无法断开它们。因此,我刚刚失去了使用iBeacon来唤醒关闭应用程序的能力,因为现在只要应用程序通过蓝牙连接,iBeacon就不会启动。
我的问题
其他应用程序是如何这么容易做到这一点的,从后台/终止中永久唤醒应用程序的合适流程是什么?我在努力找出这里的流量。
我真的希望只在不需要连接或配对的用例中使用iBeacon吗?我应该以某种方式切断用户与外围设备的连接吗?
求和
因此,总之,使用iBeacon唤醒应用程序,如果需要将/对连接到外围设备,则无法工作,因为直到不再配对/连接时,这些方法才会再次启动。如果我能找到一些神奇的方法,在应用程序死后断开一个人的连接,然后恢复到iBeacon,它就不能工作了,因为我似乎无法从后台配对,这样命令就不能到达外围设备。最后,如果我使用纯连接的蓝牙方法,当我插入/拔掉设备时,didConnect和didDisconnect方法永远不会触发。
发布于 2017-08-08 14:41:57
几点想法:
- While this behavior is typical, it is not an absolute rule. It is possible to build peripherals that keep advertising when connected, although there may be limitations with the chipset you are using.
- A common approach to prevent ever-lasting connections is to build peripheral code that will automatically disconnect if there has not been any communication with the mobile phone in X seconds or minutes. This will allow beaconing to begin again.
- When the beacon is detected in the background, send a local notification to the user telling them to launch the app to pair. (Adjust the language to match your use case.)
- When the user taps on the notification, the app will come to he foreground. Detect this and start the pairing process.
https://stackoverflow.com/questions/45569846
复制相似问题