因为iOS系统默认不会为自带的ANCS服务发送广播, 而且使用ANCS的通知订阅功能必须进行配对. 因此咱们须要在ios上写本身的代码,让目标设备和iOS进行配对. 配对完成后,监听设备和iOS均可以随意关闭蓝牙. 再次打开蓝牙后,只须要监听设备根据地址再次发起连接,就能够连接iOS的GATTserver, 以后就能够监听iOS的ANCS的通知了,不须要从新配对,对于iOS用户来讲,是透明的.android
完成配对的方式有2种,下面用android模拟了监听设备分别作了实验:ios
1.目标设备做为Central ,iOS做为Peripheral
用iOS模拟一个外围设备,Android根据设备名搜索到iOS,并发出createBond请求,开始配对.并发
2.目标设备做为Peripheral, iOS做为Central
Peripheral上须要设置BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED 权限,让ios在读取Peripheral上的某个特征值时,触发系统层的自动配对机制, 完成配对(由于在ios上,没有像android那样提供createBond函数,iOS会根据Peripheral的属性权限自动弹出配对对话框).函数
这里遇到一个奇怪的问题. 配对后,若是在iOS上使用LightBlue程序模拟一个外围设备,会致使android没法对ANCS进行写操做. 解决方法是,强制关闭lightblue程序,再关闭蓝牙,开启蓝牙. 可是我模拟的Peripheral不会对ancs形成影响, 不知道lightblue模拟时,采起了什么动做.等待调查.server
下面这个问题也是我遇到的,目前没有找到缘由和解决办法:
https://stackoverflow.com/questions/47806804/not-receiving-ios-ancs-notifications-on-androidip