You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中实现Windows客户端无需MAC地址连接Android蓝牙服务端?

解决方案:无MAC地址实现Windows客户端连接Android蓝牙服务端

一、利用InTheHand库的服务发现功能

InTheHand本身支持通过服务UUID自动匹配设备,无需提前知晓MAC地址,步骤如下:

  • 枚举当前可发现/已配对的蓝牙设备
  • 遍历设备搜索目标UUID对应的服务,找到后发起连接

核心代码示例:

using InTheHand.Net.Sockets;
using InTheHand.Net.Bluetooth;

Guid targetServiceUuid = new Guid("你的Android服务UUID");
BluetoothClient client = new BluetoothClient();

// 枚举所有可发现/已配对设备
BluetoothDeviceInfo[] devices = client.DiscoverDevices();

foreach (BluetoothDeviceInfo device in devices)
{
    try
    {
        // 检查设备是否包含目标服务
        ServiceRecord[] matchedServices = device.GetServiceRecords(targetServiceUuid);
        if (matchedServices.Length > 0)
        {
            // 建立连接
            BluetoothSocket socket = client.CreateRfcommSocketToServiceRecord(targetServiceUuid);
            socket.Connect(device.DeviceAddress, targetServiceUuid);
            // 连接成功,执行后续数据交互逻辑
            break;
        }
    }
    catch
    {
        // 跳过连接失败的设备,继续遍历
        continue;
    }
}

注意:该方式依赖设备处于可发现状态,或已与Windows设备配对过。

二、使用Windows原生UWP蓝牙API(Windows 10+)

Windows 10及以上系统可通过Windows.Devices.Bluetooth.Rfcomm命名空间,直接按服务UUID搜索并连接设备,无需手动指定MAC:

  1. 在Package.appxmanifest中添加蓝牙权限:
<Capabilities>
    <DeviceCapability Name="bluetooth.rfcomm">
        <Device Id="any">
            <Function Type="name:serialPort" />
        </Device>
    </DeviceCapability>
</Capabilities>
  1. 核心连接代码:
using Windows.Devices.Bluetooth;
using Windows.Devices.Bluetooth.Rfcomm;
using Windows.Devices.Enumeration;
using Windows.Networking.Sockets;

async Task ConnectToAndroidService()
{
    Guid targetUuid = new Guid("你的Android服务UUID");
    // 按服务UUID筛选设备
    string deviceSelector = RfcommDeviceService.GetDeviceSelector(RfcommServiceId.FromUuid(targetUuid));
    DeviceInformationCollection matchedDevices = await DeviceInformation.FindAllAsync(deviceSelector);

    if (matchedDevices.Count > 0)
    {
        // 获取第一个匹配的设备服务
        RfcommDeviceService service = await RfcommDeviceService.FromIdAsync(matchedDevices[0].Id);
        if (service != null)
        {
            // 建立Socket连接
            StreamSocket socket = new StreamSocket();
            await socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);
            // 连接成功,处理数据传输
        }
    }
}

优势:系统自动处理设备发现和服务匹配,无需手动管理MAC地址,适配现代Windows系统。

三、Win32蓝牙API(兼容旧版Windows)

若需支持Windows 7等旧系统,可直接调用Win32原生蓝牙API,通过BluetoothFindFirstService/BluetoothFindNextService函数搜索目标UUID的服务,获取对应设备后建立RFCOMM连接。这种方式需要编写PInvoke声明,适合对底层控制有需求的场景,核心逻辑为:

  • 枚举本地蓝牙适配器
  • 搜索所有可见蓝牙设备
  • 对每个设备遍历搜索目标UUID的服务
  • 获取服务的RFCOMM通道,通过CreateFile建立连接

内容的提问来源于stack exchange,提问作者Fidel Delgado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:12:34