赞
踩
前言
之前写过两篇有关于ANCS的文章,最近一段时间老是有人问关于得到ANCS服务的问题,因为IOS ANCS不同于其他的Peripheral一样对周边所有的蓝牙设备广播自己,而是仅有连接上配对并连接上IOS设备的可见,我想这对于Android、IOS、嵌入式等的开发都是一样的。
现在将以前写的Android ble操作ANCS的demo修改了一下,并集中对于ANCS的相关问题进行说明。
发现ANCS
熟悉IOS的都知道,IOS设备上的蓝牙是有很大限制的,只能连接手表、耳机等周边设备,甚至同样是IOS平台的设备都不能进行互联。但是BLE的出现给了我们使用蓝牙技术进行通信的可能。
这里我们用到的是IOS系统提供的ANCS服务获取IOS分发的通知,包括消息、来电、计划等,但是这个服务对于我们是不可见的,他并不主动进行广播,我们使用BLE scan 并不能扫描到ANCS这个服务。
** 那么是不是意味着我们就无法找到这个ANCS服务了呢? **
答案是否定的,经过调查我们发现ANCS是基于GATT做的封装,也就是他是一个BLE的gatt server,只是对通信过程加入了自定义的协议,他跟其他的Ble service是同等的,比如常见的Heart Rate。因此我们考虑通过其他的service连接上这个GATT server,然后在获取ANCS服务的思路。
how_to_find_ancs.png
发现设备
想要连接蓝牙设备我们首先要知道他的设备地址,但是IOS设备的蓝牙是不主动广播的,但是我们知道IOS是支持BLE广播的。
这里我们就可以借由这个功能让我们得到IOS设备的目标地址,当然你可以自己实现一个简单的APP去startLeAdvertisment,因为我并不会IOS开发所以这里借助了一个第三方APP(LightBlue)来虚拟一个peripherial,例如Heart Rate.
然后在我们的Android APP中进行扫描,就能扫描到这个名称为Heart Rate的周边设备。
@Override
public void onScanResult(int callbackType, ScanResult result) {
Log.d(TAG, "onScanResult Device Address :" + result.getDevice());
BluetoothDevi
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。