Tai*_*iko -2 java android ios bluetooth-lowenergy
我想创建一个BLE设备连接到手机并接收所有通知(短信,来电,电子邮件)
它应该是交叉平台并始终保持连接.
我能怎么做 ?
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,你会想要排队所有请求等...