使用BLE Android和iOS的通知

Tai*_*iko -2 java android ios bluetooth-lowenergy

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

它应该是交叉平台并始终保持连接.

我能怎么做 ?

Tai*_*iko 6

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

iOS 7-8

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

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

唯一可行的方法是Apple Notification Center Service:Official Doc Human可读解释

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

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

不需要应用程序,所有应用程序都在硬件方面完成.

Android 4.3-4.4

在Android 5.0之前,Android设备只能处于中央模式,而且永远不会处于外设模式,因此无法模拟iOS行为.

向BLE硬件发送通知的唯一方法是将外部硬件置于外围模式,然后创建专用协议,以便在中央模式下使用手机发送通知.(是的,与Apple相反)

通过扩展NotificationListenerService来收听通知非常容易且非常简单.示例实现只是不要忘记启动意图android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS以打开通知访问设置屏幕并授予对此应用程序的访问权限.

现在的问题是:由于android BLE堆栈的不稳定性很难维持BLE连接,并且你在后台时几乎无法控制服务的生命周期,所以保持它的存活也不是一种选择.(啊,不要尝试在NotificationListenerService中绑定一个Service,它不起作用)

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

很多Android手机在配对功能上都不稳定.所以理想情况下,外部硬件应该在android上使用"Just work"连接(当他是外围设备时)和当他是Central(在ios上)时使用Pairing连接

像往常一样在Android中使用BLE,你会想要排队所有请求等...