BLE Android和iOS的通知



我想创建一个BLE设备,连接到手机并接收所有通知(短信、来电、电子邮件)

它应该是跨板形式,并始终保持连接。

我该怎么办?

Android和iOS在这个问题上非常不同。

iOS 7-8

在iOS上,你的应用程序无法知道你何时收到短信、电子邮件等……因此,你在手机端无法接收通知,然后通过BLE将其发送到手机。

(此外,你知道iphone对后台运行的应用程序非常严格)

唯一的出路是苹果通知中心服务:官方文档人类可读解释

以下是它的工作原理。让您的外部硬件进入中央模式(例如"主模式",而不是通常的ppheral模式),然后要求ios设备使用"服务解决方案"打开ANCS服务这样做可能需要配对。

然后,您的设备可以连接到此服务(警告,ANCS不是标准的SIG ANS 1811服务!)

不需要任何应用程序,一切都在硬件方面完成。

Android 4.3-4.4

在android 5.0之前,android设备只能处于中央模式,而不能处于外围模式,因此无法模仿iOS的行为。

向BLE硬件发送通知的唯一方法是让外部硬件处于外围模式,然后创建一个专有协议,在中央模式下使用手机发送通知。(是的,与苹果相反)

通过扩展NotificationListenerService来侦听通知非常简单明了。示例实现请不要忘记激发intent android.settings.ACTION_NOTIFICATION_LISTENER_settings以打开通知访问设置屏幕并授予对此应用程序的访问权限。

现在的问题是:由于android BLE堆栈的不同不稳定性,维护BLE连接非常困难,而且在后台时,你对服务的寿命几乎没有控制权,所以保持它的活力也不是一个选择。(啊,不要试图在NotificationListenerService中绑定服务,它不起作用)

因此,唯一要做的就是编写一个简短的BLE类(在服务之外工作),它将快速启动连接,发送关闭的消息。

许多安卓手机的配对功能不稳定。因此,理想情况下,外部硬件应该在android上使用"Just work"连接(当他是外设时),在Central(在ios上)上使用Pairing连接

与android中的BLE一样,您需要对所有请求进行排队等。

最新更新