相关文章推荐
温柔的上铺  ·  课程大纲-教务系统·  3 月前    · 
玩篮球的登山鞋  ·  不要让你的朋友圈空空如也_沉默·  1 年前    · 
细心的乒乓球  ·  解决Type error: Invalid ...·  1 年前    · 
酷酷的牛腩  ·  江苏省人民政府 市县动态 ...·  1 年前    · 
笑点低的猴子  ·  python 解析sql表血缘,代码发我 ...·  1 年前    · 
Code  ›  Windows UWP蓝牙应用程序,设备在扫描时显示,甚至在关机时也会显示。开发者社区
蓝牙 uwp 蓝牙协议栈
https://cloud.tencent.com/developer/ask/sof/114432650/answer/136989583
一身肌肉的咖啡
1 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 Windows UWP蓝牙应用程序,设备在扫描时显示,甚至在关机时也会显示。

Stack Overflow用户
提问于 2017-08-08 12:26:27
EN

我正在开发一个UWP应用程序,它使用蓝牙连接到不同的设备。

我的问题是,一些已经配对或先前发现的设备出现在我的设备列表中,即使它们被关闭或不在范围内。

据我所知,属性 System.Devices.Aep.IsPresent 可用于筛选出当时不可用的缓存设备,但我始终获得该属性的"True“,即使我知道设备是不可访问的。

对如何解决这件事有什么想法吗?

设置

代码语言: javascript
复制
string[] requestedProperties = { "System.Devices.Aep.DeviceAddress", "System.Devices.Aep.IsConnected", "System.Devices.Aep.IsPresent", "System.Devices.Aep.ContainerId", "System.Devices.Aep.DeviceAddress", "System.Devices.Aep.Manufacturer", "System.Devices.Aep.ModelId", "System.Devices.Aep.ProtocolId", "System.Devices.Aep.SignalStrength"};
        _deviceWatcher = DeviceInformation.CreateWatcher("{REMOVED, NOT IMPORTANT}", requestedProperties, DeviceInformationKind.AssociationEndpoint);
        _deviceWatcher.Added += DeviceAdded;
        _deviceWatcher.Updated += DeviceUpdated;
        _deviceWatcher.Removed += DeviceRemoved;
        _deviceWatcher.EnumerationCompleted += DeviceEnumerationCompleted;

设备添加时的回调

在这里,isPresent总是正确的

代码语言: javascript
复制
private void DeviceAdded(DeviceWatcher sender, DeviceInformation deviceInfo)
    Device device = new Device(deviceInfo);
    bool isPresent = (bool)deviceInfo.Properties.Single(p => p.Key == "System.Devices.Aep.IsPresent").Value;
    Debug.WriteLine("*** Found device " + deviceInfo.Id + " / " + device.Id + ", " + "name: " + deviceInfo.Name + " ***");
    Debug.WriteLine("RSSI = " + deviceInfo.Properties.Single(d => d.Key == "System.Devices.Aep.SignalStrength").Value);
    Debug.WriteLine("Present: " + isPresent);
    var rssi = deviceInfo.Properties.Single(d => d.Key == "System.Devices.Aep.SignalStrength").Value;
    if (rssi != null)
        device.Rssi = int.Parse(rssi.ToString());
    if (DiscoveredDevices.All(x => x.Id != device.Id) && isPresent)
        DiscoveredDevices.Add(device);
        DeviceDiscovered(this, new DeviceDiscoveredEventArgs(device));
}
3 2.8K 0 票数 5
EN
c#
windows
bluetooth
uwp

Stack Overflow用户

发布于 2018-08-22 20:57:58

具体回答你的问题有点困难,因为你可以通过多种方式使用蓝牙连接到设备上。例如,有些设备需要配对才能使用。除非蓝牙堆栈发出查询,否则无法发现某些设备。

不过,要使这一目标朝着正确的方向发展,还有几件事要做。

  1. 您要做的第一件事是使用AQS选择器字符串来约束您正在发现的内容。选择器还应该约束协议,因为您不希望PC发现WiFiDirect设备和网络设备。后过滤不利于性能。
  2. 接下来看蓝牙样本。它们为不同的场景提供了许多get选择器类型方法,您可以使用这些方法传递给create。这两种方法中的任何一种都可以做您想做的事情,或者您可以查看它们的AQS字符串来了解您的过滤器应该是什么样子。

就您可以用于AQS选择器的属性而言,我不确定是否存在是否有效,但以下是您在构建选择器/筛选器时可能考虑的其他一些属性。就像我说过的,这种情况会产生很大的不同;就像耳机必须配对一样,而有些LE设备不能配对,只是可以连接。

代码语言: javascript
复制
System.Devices.Aep.Bluetooth.IssueInquiry
System.Devices.Aep.Bluetooth.LastSeenTime
 
推荐文章
温柔的上铺  ·  课程大纲-教务系统
3 月前
玩篮球的登山鞋  ·  不要让你的朋友圈空空如也_沉默
1 年前
细心的乒乓球  ·  解决Type error: Invalid dimensions for image data_invalid dimension size怎么解决-CSDN博客
1 年前
酷酷的牛腩  ·  江苏省人民政府 市县动态 宿迁市多措并举打造“智改数转网联”新高地
1 年前
笑点低的猴子  ·  python 解析sql表血缘,代码发我 - CSDN文库
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号