我想创建一个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一样,您需要对所有请求进行排队等。