如何在Windows 10中通过.Net为蓝牙适配器添加RFCOMM串口设备
问题描述
我希望在Windows系统中通过.NET使用蓝牙串口,尝试用以下代码扫描设备:
var devices = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));
已经在Package.appxmanifest的<Capabilities>节点中添加了权限配置:
<m2:DeviceCapability Name="bluetooth.rfcomm"> <m2:Device Id="any"> <m2:Function Type="name.serialPort"/> </m2:Device> </m2:DeviceCapability>
但全新安装蓝牙适配器后,代码无法列出串口设备;运行MyPhoneExplorer应用后,能通过相同代码找到名为“MyPhoneExplorer”的RFCOMM设备,但卸载重装蓝牙适配器后该设备又消失。请问如何为蓝牙适配器添加可被上述代码检测到的RFCOMM串口设备?
解决方案
1. 启用蓝牙适配器的SPP服务
- 打开设备管理器,展开“蓝牙”节点,右键点击你的蓝牙适配器,选择“属性”
- 切换到“服务”选项卡,勾选“串行端口(SPP)”服务,点击“确定”后系统会自动安装对应串口驱动
- 重启电脑后重新运行代码扫描
2. 手动注册RFCOMM串口服务
如果设备管理器中无SPP服务选项,可通过注册表手动添加:
- 按下
Win+R输入regedit打开注册表编辑器 - 导航到路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Services - 右键
Services项,新建“项”,命名为00001101-0000-1000-8000-00805F9B34FB(RFCOMM串口服务的标准UUID) - 在新建项中,右键新建“字符串值”,命名为
Name,值设为Serial Port - 新建“DWORD(32位)值”,命名为
Security,值设为0 - 禁用再启用蓝牙适配器,或重启电脑
3. 确保蓝牙设备配对并建立连接
- 先通过Windows设置的“蓝牙和设备”完成目标蓝牙设备的配对
- 部分蓝牙设备需要主动发起一次SPP串口连接,才会在系统中注册对应的RFCOMM服务,可尝试用串口工具发起连接后再扫描
4. 校验应用权限配置完整性
- 确认
Package.appxmanifest的根节点Package已添加命名空间声明:xmlns:m2="http://schemas.microsoft.com/appx/manifest/foundation/windows10/2" - 检查
Capabilities节点下的配置无拼写错误,Type属性的name.serialPort是正确的RFCOMM服务类型
5. 兼容型扫描代码
如果以上方法无效,可尝试枚举所有RFCOMM设备再过滤串口服务:
var allRfcommDevices = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector()); foreach (var device in allRfcommDevices) { var service = await RfcommDeviceService.FromIdAsync(device.Id); if (service?.ServiceId == RfcommServiceId.SerialPort) { // 找到目标串口设备 Console.WriteLine(device.Name); } }
内容的提问来源于stack exchange,提问作者user20138168
相关产品推荐
相关产品推荐

