如何为蓝牙指定设备功能

Windows 10 注释,请参阅 Windows 10 中的 不同。

 

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

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

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

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

函数类型 元素指定设备函数。 此元素可以指定蓝牙 服务名称(名称)或 服务 ID(serviceId)。

蓝牙 DeviceCapability 用法

蓝牙应用必须在其 应用包清单中包含某些设备功能, 指定有关设备的密钥信息。 以下是分层顺序的必需元素:

<DeviceCapability>名称 属性必须是“bluetooth.rfcomm”才能访问蓝牙 RFCOMM 设备或用于访问蓝牙 GATT 设备的“bluetooth.genericAttributeProfile”。

<设备>ID 属性必须指定供应商/产品 ID 或制造商/型号,也可以是“any”,以允许访问与函数类型匹配的任何设备。

<函数>类型 属性可以指定服务名称或服务 ID。

注意 无法在 Microsoft Visual Studio 中修改蓝牙设备功能。 必须在解决方案资源管理器 中右键单击 Package.appxmanifest 文件,然后选择 打开方式...,然后 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>

定义 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
  • name:obexObjectPush
  • name:obexFileTransfer
  • name:phoneBookAccessPce
  • name:phoneBookAccessPse
  • name:genericFileTransfer

不支持以下 RFCOMM 服务:

  • 服务发现(0x1000)
  • 浏览组描述符(0x1001)
  • 使用 PPP 的 LAN 访问(0x1102)
  • 耳机 (0x1108, 0x1112)
  • 无绳电话(0x1109)
  • 音频源(0x110A)和接收器(0x110B)
  • Intercom (0x1110)
  • 传真(0x1111)
  • WAP (0x1113,0x1114)
  • NAP (0x1116)
  • GN (0x1117)
  • HCR 打印(0x1126)和扫描(0x1127)
  • 常见的 ISDN 访问(0x1128)
  • SIM 访问(0x112D)
  • 头戴显示设备 - HS (0x1131)
  • GNSS 服务器 (0x1136)
  • PnP 信息 (0x1200)
  • 通用网络(0x1201)
  • 通用音频(0x1203)
  • 通用电话(0x1204)
  • UPnP (0x1205,0x1206)
  • ESDP UPnP IP(0x1300、0x1301、0x1302)
  • 视频源(0x1303)和接收器(0x1304)
  • HDP 源(0x1401)和接收器(0x1402)

支持蓝牙 GATT 服务

可通过 名称 值支持以下 GATT 服务:

  • name:battery
  • name:bloodPressure
  • name:cyclingSpeedAndCadence
  • name:genericAccess
  • name:genericAttribute
  • name:glucose
  • name:healthThermometer
  • name:heartRate
  • name:runningSpeedAndCadence

不支持以下 GATT 服务:

  • 人机接口设备(0x1812)