查看: 1099|回复: 0

[技术交流] BLE ANCS协议介绍(下)

[复制链接]

108

主题

163

帖子

618

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
618
发表于 2021-4-28 17:51:44 | 显示全部楼层 |阅读模式
  2.4 Category Count:

  统计当前收到的这个类型的通知已经有多少个了。

  比如qq消息和短信都被分类成Social类型,手机连接上设备建立ANCS连接后,收到了第一个qq消息时,则手机推送一条Social类型的通知给设备,其Category Count就为1,如果手机不处理这个通知,则当手机再收到qq消息时就会再次推送一条Social通知给设备,其Category Count就是2。同样手机不处理这个2个qq消息时,如果又收到了一条短信,则手机又会推送一条Social类型的通知给设备,其Category Count为3.

  2.5 NotificationUID:用来唯一标识一个通知。


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

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

  下面介绍控制Characteristics和数据Characteristics上传输的数据。

  3 Control Point and Data Source


  控制点可以用来获取通知的详细信息。

  前面提到一些通知是有一些预定义操作的,比如来电通知就有积极动作(接听)和消极动作(拒接)这两个预定义的动作,所以控制点除了用来发送获取通知详细信息的命令,还可以用来发送执行预定义的积极动作或消极动作的指令。

  数据源即用来返回数据的,在控制点上发送的获取详细信息的命令后,就会再数据源通道上返回通知的详细信息。

  通知的详细信息由一系列的Attributes组成,每个Attribute都表示这个通知某方面的详细信息,如下表:
NotificationAttributeIDapp identifier
=0
NotificationAttributeIDTitle
=1,(Needs to be followed by a 2-bytes max length parameter)
NotificationAttributeIDSubtitle
=2,(Needs to be followed by a 2-bytes max length parameter)
NotificationAttributeIDMessage
=3,(Needs to be followed by a 2-bytes max length parameter)
NotificationAttributeIDMessageSize
=4,
NotificationAttributeIDDate
=5,
NotificationAttributeIDPositiveActionLabel
=6
NotificationAttributeIDNegativeActionLabel
=7,
Reserved NotificationAttributeID values
=8–255
  AppIdentifier该attribute表示发送这个通知App的标识。比qq消息的app id就是com.tencent.mqq

  Title该attribute表示通知的标题,qq消息的标题就是QQ

  Subtitle为子标题,通常为空。Message就是信息内容,MessageSize为信息大小,Date为通知发出的时间(不是返回详细信息的时间,是之前通知的发出时间),PositiveActionLabel和NegativeActionLabel即描述积极动作和消极动作具体是什么。来电通知其积极动作和消极动作通常就是接听和拒接。

  具体过程如,当手机qq收到一条qq消息时,手机就会在通知源通道上推送一条Social类型的通知给设备,设备收到后可以在控制点通道上发送一条获取该通知详细命令,之后手机再通过数据源通道返回其详细信息。

  3.1获取通知的详细信息的命令格式和响应数据格式


  既然通知的详细信息是由一个个attribute组成,那么我们获取详细信息的时候就可以自己指定获取这个通知的哪些attribute。所以获取通知详细命令的格式如下:
  3.1.1 CommandID:

  获取通知详细信息的命令ID为0

  3.1.2 NotificationUID:

  用来具体标识要获取哪个通知的详细消息,这个值就是用通知源通道中收到的通知的NotificationUID字段。

  3.1.3AttributeID n:

  这些字段即指定想获取这个通知的哪些详细信息,一些attributeID之后需要跟2字节的max length表示设备(NC)期望获取这个通知该特性信息的最大长度。具体哪些attribute需要跟2字节max length在前面的attributes表中有说明。

  获取通知attributes(即获取通知详细信息)在控制点通道上发出以后,NP(手机)就会在数据源通道返回这些attributes的值。即通知的一些具体信息。返回的响应数据格式如下:
  CommandID同样还是0,表示该响应是获取通知attributes的响应,NotificationUID与命令中的NotificationUID对应,用来表示返回的这些attributes的值是对应哪个通知的。

  随后就是具体的attributes的值了,均由3字段组成,分别表示attribute,其值长度,具体值。

  3.2获取手机上产生本条通知的APP的信息


  如何获取产生这个通知的app的消息?设备收到的通知实际是手机发送过来的,而手机之所以发送这个通知给设备时因为手机中的一些应用产生了一些消息。

  比如,手机上的qq产生了一条消息,则手机通知栏上就会产生这个通知,同时也会推送一条Social类型的通知给连接的设备。

  所以设备端想获取产生这个通知的APP的一些信息,首先应该获取该通知由哪个app产生的,然后才能查询该app的消息。

  前面提到,收到通知后,一般需要再在控制通道上发送获取通信详细信息的命令来获取到该通知相关的一些更具体的信息,而获取详细信息实际就是获取这个通知的一些attributes的具体的值。

  其中就有一个attribute用来标识是由哪个app产生的这个通知,即NotificationAttributeIDappIdentifier。

  所以受到通知后首先需要使用获取通知attributes的命令来获取其NotificationAttributeIDappIdentifier的具体值,这个就知道了产生这个通知的app的标识。

  之后再通过获取app信息命令来获取产生这个通知的app的信息,命令格式如下:
  CommandID:为1,标识获取app的相关信息命令。

  App Identifier:用来指示获取哪个app信息。就是获取通知详细信息中返回的NotificationAttributeIDAppIdentifier的值。

  Attributes:获取通知的详细信息就是获取通知一些attributes的值,同样获取APP详细信息也就是获取APP的一些attributes。

  目前:app相关的attributes只有一个,即其名字。
AppAttributeIDDisplayName=0,
Reserved AppAttributeID values=1-225
  同样获取app详细信息的返回也是通过数据源通道返回。
  CommandID:为1,标识获取app的相关信息命令的响应。

  App Identifier:与命令中的app id对应,用来指示获取哪个app信息。

  随后就是具体的各个attributes的值。

  如下图是收到qq消息的通知后,获取其详细信息,并通过app id这个attribute来获取app的消息
  3.3执行通知预定义动作

  通知源部分有提到一些通知具有一些预定义的执行动作,通过通知的EventFlags字段来指示这个通知是否有预定义的积极动作或消极动作。来电通知就有接听/拒听的积极动作/消极动作。

  所以如果收到来电通知时,即通知CategoryID字段为CategoryIDIncomingCall时,如果接听,就可以让设备在控制点通道上发送执行积极动作的命令,同理如果拒接,就在控制点通道上发送执行消极动作的命令。

  执行预定义命令格式如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表