如何为蓝牙指定设备功能

注意有关 Windows 10,请参阅Windows 10 的不同之处。

 

包清单是一个 XML 文档,其中包含系统部署、显示或更新 Windows 运行时应用应用程序所需的信息。 此信息包括包标识、包依赖项、所需功能、可视元素和扩展点。 每个应用包都必须包含一个包清单。

有关包清单的详细信息,请参阅 如何手动创建包清单

通过 Rfcomm 或 Gatt api 访问 (蓝牙设备的 Windows 运行时应用) 必须在其清单的 "功能" 节点中包含特定DeviceCapability数据。 此数据标识设备及其目的 (或函数) 。 请注意,某些设备可能有多个功能。

设备 Id元素对应于设备标识符。 此元素可以指定 (vid) 和产品 Id的组合供应商 id (pid) ;或者,它可能指定制造商型号的组合;或者,它可以指定泛型字符串 ( "any" ) 。 此外,如果 设备 id 指定 供应商 id (vid) 和产品 (Id) ,则它可能包含可选的提供程序字符串 "usb" 或 "蓝牙"。

函数 Type元素指定设备函数。 此元素可以指定蓝牙服务名称 (名称) 或 (serviceId) 的服务 Id

蓝牙 DeviceCapability 用法

蓝牙应用必须在其应用程序包清单中包含某些设备功能,以指定有关设备的关键信息。 下面是按层次顺序排列的必需元素:

< DeviceCapability >Name属性必须是 "rfcomm",以便访问蓝牙 rfcomm 设备,或使用 "" 访问蓝牙 GATT 设备。

< 设备 >Id属性必须指定供应商/产品 Id 或制造商/型号,或者可以为 "任何",以允许访问与该功能类型匹配的任何设备。

< 函数 >Type特性可以指定服务名称或服务 Id。

注意无法在 Microsoft Visual Studio 中修改蓝牙设备功能。 必须右键单击解决方案资源管理器中的 appxmanifest.xml 文件,然后选择 "打开方式 ...",然后选择 " XML (文本) 编辑器"。 文件以纯 XML 格式打开。

 

定义 Rfcomm DeviceCapabilities

使用以下布局描述应用的蓝牙 RFCOMM 功能:

<m2:DeviceCapability Name="bluetooth.rfcomm">
  <m2:Device Id="vidpid:xxxx xxxx bluetooth">
    <m2:Function Type="serviceId:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/>
    <m2:Function Type="name:xxxxx"/>
  </m2:Device>
<m2:/DeviceCapability>

定义 Bluetooth.genericattributeprofile 替换 DeviceCapabilities

使用以下布局描述应用的蓝牙 GATT 功能:

<m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
  <m2:Device Id="model:xxxx;xxxx">
    <m2:Function Type="serviceId:xxxxxxxx"/>
    <m2:Function Type="name:xxxxx"/>
  <m2:/Device>
<m2:/DeviceCapability>

如何指定 DeviceCapabilities 示例

以下条目说明了为蓝牙设备定义DeviceCapabilities的不同方法。

以下代码片段使用供应商 id产品 Id组合以及可选的提供商标识蓝牙 RFCOMM 设备的DeviceCapabilities

<m2:DeviceCapability Name="bluetooth.rfcomm">
  <m2:Device Id="vidpid:0006 0001 bluetooth">
    <m2:Function Type="name:obexObjectPush"/>
  </m2:Device>
</m2:DeviceCapability>

或者,以下代码片段使用其完整 Id 识别蓝牙 RFCOMM 设备的DeviceCapabilities

<m2:DeviceCapability Name="bluetooth.rfcomm">
  <m2:Device Id="any">
    <m2:Function Type="name:AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE" />
  </m2:Device>
</m2:DeviceCapability>

以下代码片段使用制造商型号组合来识别蓝牙 GATT 设备的DeviceCapabilities

<m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
  <m2:Device Id="any">
    <m2:Function Type="name:heartRate" />
  </m2:Device>
</m2:DeviceCapability>

支持蓝牙 RFCOMM 服务

以下 RFCOMM 服务是通过 name 值支持的:

  • 名称: serialPort
  • 名称: obexObjectPush
  • 名称: obexFileTransfer
  • 名称: phoneBookAccessPce
  • 名称: phoneBookAccessPse
  • 名称: genericFileTransfer

不支持以下 RFCOMM 服务:

  • 服务发现 (0x1000)
  • 浏览组描述符 (0x1001)
  • 使用 PPP (0x1102 的 LAN 访问)
  • (0x1103) 的拨号网络
  • 耳机 (0x1108,0x1112)
  • 无线电话 (0x1109)
  • 音频源 (0x110A) 和接收器 (0x110B)
  • A/V Remote Control (0x110C,0x110E,0x110F)
  • 对讲机 (0x1110)
  • 传真 (0x1111)
  • WAP (0x1113,0x1114)
  • PANU (0x1115)
  • NAP (0x1116)
  • GN (0x1117)
  • Handsfree (0x111E,0x111F)
  • 人体学接口设备 (0x1124)
  • HCR 打印 (0x1126) 和扫描 (0x1127)
  • 常见 ISDN 访问 (0x1128)
  • SIM 访问 (0x112D)
  • 耳机– HS (0x1131)
  • GNSS Server (0x1136)
  • PnP 信息 (0x1200)
  • 通用网络 (0x1201)
  • 一般音频 (0x1203)
  • 通用电话 (0x1204)
  • UPnP (0x1205,0x1206)
  • ESDP UPnP IP (0x1300、0x1301、0x1302)
  • 视频源 (0x1303) 和接收器 (0x1304)
  • 视频分发 (0x1305)
  • HDP Source (0x1401) 和接收器 (0x1402)

支持蓝牙 GATT 服务

以下 GATT 服务是通过 name 值支持的:

  • 名称:电池
  • 名称: bloodPressure
  • 名称: cyclingSpeedAndCadence
  • 名称: genericAccess
  • 名称: genericAttribute
  • 名称:血糖
  • 名称: healthThermometer
  • 名称: heartRate
  • 名称: runningSpeedAndCadence

不支持以下 GATT 服务:

  • 人体学接口设备 (0x1812)