目前,我正在使用<style name="BodyText">
<item name="android:padding">5dp</item>
<item name="android:gravity">center</item>
<item name="android:textSize">21sp</item>
<item name="android:textStyle">bold</item>
<item name="android:textCursorDrawable">@null</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
</style>
的构造函数,该构造函数接受其委托和其他参数。从那时起,如果应用程序处于前台或后台状态,则只要蓝牙状态更改(例如turnOn / turnOff),就会按预期调用委托方法。当该应用程序甚至不在后台运行时(即该应用程序被杀死),该应用程序都不会启动,并且系统永远不会调用委托方法。
我确保在CBCentralManager
的{{1}}下有bluetooth-central
和bluetooth-peripheral
。
那么,即使应用程序根本没有运行,有什么方法可以接收状态更改通知吗?
边注:我们的应用依赖于蓝牙才能正常运行,因此保持蓝牙开启很重要。想法是,如果用户关闭了蓝牙,我们需要通过本地通知来提醒他们,需要正确打开蓝牙才能使我们的应用正常运行。
答案 0 :(得分:1)
那么,即使应用程序根本没有运行,有什么方法可以接收状态更改通知吗?
不幸的是,即使应用程序根本没有运行,也无法接收状态更改通知。
注意:即使使用 iBeacons ,您也需要先唤醒应用程序,然后才能开始收听蓝牙设备状态的变化。
iBeacon 可以使用监视API将您的应用唤醒到后台。即使自设备重新启动以来尚未启动您的应用程序,或者即使该应用程序已从任务切换器中终止,它也可以执行此操作(尽管后者需要iOS 7.1+)。这可以通过您的应用程序调用{{1}}方法来实现startRangingBeaconsInRegion:
上,并且还实现了CLLocationManager
协议的CLLocationManagerDelegate
,locationManager:didDetermineState:forRegion:
和/或locationManager:didEnterRegion:
方法。