我正在研究一种在门关闭时保持计数的设备。我想要做的是当我走进门时,我的iPhone会自动同步设备上的数据并将该计数发送到服务器(通过iPhone),而无需打开应用程序或将其置于后台。这有可能,如果是这样的话?
这是我正在思考的图表:
门关闭 - > BLE通知iPhone - > BLE向iPhone发送计数 - > iPhone将该值发送到服务器
所有没有用户(我)触摸我的设备或打开已安装的iOS应用程序。
答案 0 :(得分:5)
您的应用必须在后台运行才能执行某些操作,但这没关系,因为Core Bluetooth后台模式会为您完成这项工作。
首先,您需要选择"使用蓝牙配件"项目中的后台模式。
现在,您的程序流程将是这样的:
didConnectPeripheral
委托方法后,您可以读取计数并在获得值后更新服务器didDisconnectPeripheral
的电话。在此方法中,您立即重新发出连接到外围设备。 didConnectPeripheral
,然后您可以按照步骤5进行操作(在这种情况下,您的应用已经在在没有用户做任何事情的情况下读取数据后,它将返回暂停状态。您在步骤5中更新服务器。无论应用程序是在前台还是后台,都会执行此步骤。用户无需打开您的应用。
现在最终iOS可能会将您的应用从暂停状态中移除,比如由于内存压力。为了在看到外围设备时仍然能够连接到外围设备,您需要按照Core Bluetooth Programming Guide
中的说明选择进行状态恢复。答案 1 :(得分:2)
如果您打算构建自己的电路板和蓝牙LE固件,这非常简单:
然后,手机可以通过使用CoreLocation API来监控信标(用于快速后台唤醒)和范围(读取特定标识符),然后根据以下内容将计数器值发送到服务器来接收此计数器。标识符读。
使用CoreLocation而不是CoreBluetooth作为@ paulw11的优势在于他非常好的答案是应用程序的更快后台唤醒,允许应用程序在后台可靠地读取计数器。使用CoreBluetooth,这种后台唤醒可能会慢很多,并且更容易错过开门事件。