一:BLE-ANCS协议介绍

1、ANCS(Apple Notification Center Service)是IOS系统中的一个通知服务,使用该服务的方式为,设备连接手机后,设备上的GATT客户端发现IOS手机端上的ANCS服务,并且使能其通知源Characteristics的notifys功能,之后IOS系统就会通过ble推送消息给设备。

2、通常推送的消息仅仅是一个简短通知,比如通知有一个社交消息,如果需要获取详细内容,还需要设备通过控制点Characteristics主动发送控制指令给ANCS服务,让其返回详细内容,返回的详细信息通过一个数据源Characteristics来返回。所以连接上服务后除了使能通知源Characteristics的notify功能,如果需要获取通知的详细信息,还需要使能数据源Characteristics的notify功能。

3、ANCS服务及其几个特征:

ANCS服务:UUID 7905F431-b5CE-4E99-A40F-4B1E122D00D0

Notification Source:UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD(notifiable属性),NP用来发送通知给NC。

Control Point:UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9(writeable with response),NC用来发送控制命令给NP,如获取通知详细信息。

Data Source:UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB(notification),NP收到NC获取详细信息命令后返回通知的详细信息。

4、NC(消息消费者)与NP(消息提供者)交互

notification source发送给NC设备的通知仅仅是简短的消息,如果希望获取详细的消息则需要NC设备主动发送控制指令给NP设备上服务的Control Point特征,发送控制消息后ANCS服务会返回更详细的消息,但是这个消息不会再通过notification source特征,而是通过Data Source特征。

二:ANCS服务支持的Characteristics
notify source通知源

NP发送通知给NC的通道,发送的数据格式如下:

a. EventID:表示通知的类型 主要有added,modified,removed

eg:手机收到微信消息,则INP设备发送一个added类型的通知给NC设备,如果NP设备在通知栏主动清除了这通知,则NP设备就会发送一个removed的通知给NC设备。

b. EventFlags:使用每个bit表示通知的特性

EventFlagSilent bit 意义
EventFlagImportant (1<<1) 表示通知重要,比如手机来电时,发送给NC的通知该bit就会被置位
EventFlagPreExisting (1<<2) 表示消息是之前就存在的,比如NC和NP断开连接后再次连接,NP就会发送断开前没处理的通知,该bit就会被置位
EventFlagPositiveAction (1<<3) 表示这个通知具有一些预定义的动作,比如电话通知的接听和拒接,至于执不执行则需要NC设备发送执行PositiveAction或NegativeAction命令
EventFlagNegativeAction (1<<4) 同上
Reserved EventFlags (1<<5)-(1<<7) 保留

c. CategoryID

CategoryID分类通知类型 Value
CategoryIDOther 0
CategoryIDIncomingCall 1
CategoryIDMissedCall 2
CategoryIDVoicemail 3
CategoryIDSocial 4
CategoryIDSchedule 5
CategoryIDEmail 6
CategoryIDNews 7
CategoryIDHealthAndFitness 8
CategoryIDBusinessAndFinance 9
CategoryIDLocation 10
tegoryIDEntertainment 11
Reserved CategoryID 12-255

d. Category Count

​ 统计当前收到的这个类型的通知已经有多少个,比如NP设备收到一条微信消息时,推送给NP设备,这时Category Count就为1,如果手机不处理这个通知,则当再收到微信消息时就会再推送一条通知给NC设备,其CategoryCount就为2了,依此类推,手机没处理的消息通知,推送到NC设备其CategoryCount就会累加。

​ e. NotificationID

​ 用来唯一标识一个通知,ANCS建立连接后收到的每个通知都有一个NotificationID,通知只是一个简短消息,通常再需要发送指令给NP设备来获取通知的详细信息,这个时候就需要这个NotificationID来标识是想获取哪个通知的详细信息。

以上就是通知源特征上推送的通知的格式。

Control Point控制点
​ 控制点可以用来获取通知的详细信息,还可以做一些预定义操作,比如来电通知就有积极动作(接听)和消极动作(拒接),所以控制点除了用来发送获取通知详细信息的命令,还可以用来发送执行预定义的积极动作或消极动作的指令。获取通知详细信息的命令的格式如下:

字段 意义
CommandID 获取通知详细信息的命令ID为0
NotificationID 标识要获取哪个通知的详细信息,这个值就是用通知源中收到的通知的NotificationID字段
AttributeID 这些字段即指定想要获取这个通知的哪些详细信息
Notification AttributeID n max length 某些AttributeID需要跟两个字节来表示该特性信息的最大长度,后面讲Data Source时会列出哪些AttributetID需要max length字段

Data Source数据源

数据源即用来返回数据的,在控制点上发送的获取详细信息的命令后,就会再数据源通道上返回通知的详细信息,通知的详细信息由一系列的Attribute组成,如下表

AttributeID Value 意义
NotificationAttributeIDAppIdentifier 0 通知App的标识
NotificationAttributeIDTitle 1 通知的标题,获取该AttributteID需要跟两个字节来表示信息最大长度
NotificationAttributeIDSubtile 2 子标题,通常为空,获取该AttributteID需要跟两个字节来表示信息最大长度
NotificationAttributeIDMessage 3 信息内容,获取该AttributteID需要跟两个字节来表示信息最大长度
NotificationAttributeIDMessageSize 4 信息大小
NotificationAttributeIDDate 5 通知发出的时间,不是返回详细信息的时间
NotificationAttributeIDPositiveActionLabel 6 表示积极动作和消极动作具体是什么,来电通知其积极动作就是接听,消极动作通常就是拒接
NotificationAttributeIDNegativeActionLabel 7 同上

获取手机上产生本条通知的APP的信息
前面提到收到通知后,一般需要再在控制通道上发送获取信息详细内容的命令来获取通知相关的一些更具体的信息,其中NotificationAttributeIDAppIdentifier就是用来标识App的来源的,得到了AppIdentifier后再通过获取app信息的命令来获取产生这个通知的app的信息,命令格式如下

其中app相关的attribute只有一个,即其名字

AppAttributeID Value
AppAttributeIDDisplayName 0
Reserved AppAttributeID 1-255

CommandID为1,AppIdentifier与命令中的app id对应,用来指示获取哪个app信息

执行通知预定义动作
通知源部分有提到一些通知具有一些预定义的执行动作,通过通知的EventFlags字段来指示这个通知是否有预定义的积极动作或消极动作,比如来电通知就有接听或拒接的 积极动作或消极动作,所以如果收到来电通知时,即通知CategoryID字段为CategoryIDIncomingCall时,如果接听,就可以让设备在控制点通道上发送执行积极动作的命令,同理如果拒接,就在控制点通道上发送执行消极动作的命令。

命令格式如下

字段 意义
CommandID 为2,表示执行预定义动作
NotificationID 用来标识执行哪个通知的预定义动作
Action ID 0,表示执行积极预定义动作,1,表示执行消极预定义动作

Android 蓝牙 IOS ANCE协议介绍 - 史上最详细相关推荐

  1. Android 蓝牙 hid hogp协议分析大全- 全网最详细

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. 简述 HID ...

  2. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...

    QQ1 下载sdk并运行demo 2 各种配置 IUiListener 4 分享图片41 分享到QQ 41 分享到QZONE Sina微博配置 选择集成sdk方式 分享图片 现在项目中用个第三方登录, ...

  3. 史上最详细唇语识别数据集综述

    更新:VIPL官网网页格式更改,导致旧的LRW1000链接无法访问,现已更新LRW1000数据集链接,内部包含申请需要的文件 推荐一个大佬的综述,关于实现唇语识别的多种途径. 说明:本文包括经常用语唇 ...

  4. 史上最详细 Lipreading using Temporal Convolutional Networks 环境配置

    唇语识别是目前人工智能领域比较热门的应用之一,本文将在之后的内容中介绍2020年英文词汇级唇语识别在LRW(Lir Reading in the Wild)数据集以及LRW-1000两个数据集上实现S ...

  5. 史上最详细的Android Studio系列教程四--Gradle基础

    史上最详细的Android Studio系列教程四--Gradle基础 转载于:https://www.cnblogs.com/zhujiabin/p/5125917.html

  6. android 兼容性定义,谷歌释出 Android 7.0 兼容性定义文件,史上最严

    原标题:谷歌释出 Android 7.0 兼容性定义文件,史上最严 每次跟随 Android 系统的更新,谷歌每年也会更新 Android 兼容性定义文档来确保 OEM 厂商的设备能够正常预装谷歌全家 ...

  7. python程序员自我介绍范文_程序员的自我介绍|史上最有趣的版本

    原标题:程序员的自我介绍|史上最有趣的版本 这篇文章的原文来自:A Little Printf Story,作者仿照<小王子>中的情节,通过小printf遇见的不同类型的程序员,最后悟出什 ...

  8. 史上最详细的LXR安装介绍

    史上最详细的LXR安装介绍(Ubuntu14.04+Apache2.4.7) 简介: LXR (Linux Cross Reference)是一个通过交叉索引方便用户查看项目源代码的工具.项目地址:h ...

  9. android qq消息数 拖拽动画,史上最详细仿QQ未读消息拖拽粘性效果的实现

    好久没写文章了,前段时间由于项目代码重构忙了一段时间,现在终于有点时间了就为大家带来一篇关于动画学习的自定义View:类似QQ消息拖拽的效果. 其实QQ当时更新的时候我还没注意到这个小红点是可以拖拽的 ...

最新文章

  1. AVR系列之ADC转换
  2. 机器学习之单变量线性回归(Linear Regression with One Variable)
  3. 9款jQuery插件为你的网站增加亮点
  4. web python selenium自动化面试题_干货分享 | Selenium 自动化测试相关的面试题
  5. 【并查集】黑魔法师之门(codevs 1995/joyoi-codevs 1995)
  6. python脚本编程100例_python100例,python经典例题
  7. 内向的人在面试时如何表现自己?
  8. centos7修改ip地址命令_每天一条Linux命令(12) hostnam (超详细)
  9. cdr圆形渐变填充怎么设置_玩出新花样|渐变应用于形状
  10. 【渝粤教育】国家开放大学2018年春季 0689-21T老年心理健康 参考试题
  11. Web Resources on Patten Recognition
  12. java jni 傻瓜教程
  13. C4D本来很简单(新手入门学习方法+C4D工作流程)
  14. 网络推广有哪些常见的推广方法?
  15. Graphene(石墨烯)区块传播技术能够实现10倍的更高效率
  16. 一筐梨子amp;一筐水果——协变性(covariant)
  17. OSChina 周五乱弹 —— 睡觉都枕着小姐姐
  18. OFFICE中的VBA库的定义
  19. 计算机课件制作总结,课件制作比赛活动总结范文
  20. 笔记本无线热点共享批处理bat_马立杰_新浪博客

热门文章

  1. 项目阶段六:查看我的订单模块
  2. cmd 复制到剪贴板命令_从命令行复制到剪贴板
  3. Delaunay三角化
  4. C语言函数输入/输出【IN/OUT】参数讲解
  5. 失公子因一句“谣言“,继承千万家产《打工人的故事》
  6. python框架-web2py
  7. 新AI编程语言Mojo,比Python快35000倍
  8. C++主动调用析构函数分析
  9. python交叉验证法_详解python实现交叉验证法与留出法
  10. 宜家一元甜筒背后的奥秘:如何利用峰终定律提升用户体验