繁体   English   中英

蓝牙低功耗连接参数更新 - 导致HRESULT的设备或窗口:0x80070005(E_ACCESSDENIED))?

[英]Bluetooth Low Energy connection parameters update - device or windows causing HRESULT: 0x80070005 (E_ACCESSDENIED))?

我正在尝试写入GAP服务(0x180)特性和0x2A04

每当我尝试写入0x2A04(连接参数)或0x0200(设备名称)时,

    var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromShortId(0x1800));
    var service = await GattDeviceService.FromIdAsync(devices[0].Id);

    var gapData = service.GetCharacteristics(new Guid("00002A04-0000-1000-8000-00805f9b34fb"))[0];
    var raw = await gapData.ReadValueAsync();

    byte[] conParas = new byte[raw.Value.Length];
    DataReader.FromBuffer(raw.Value).ReadBytes(conParas);
    //I can breakpoint and verify that the read works fine

    var status = await gapData.WriteValueAsync(conParas.AsBuffer());

并调用WriteValueAsync(),程序在该行中断,我的异常是

mscorlib.dll中出现“System.UnauthorizedAccessException”类型的异常,但未在用户代码中处理

其他信息:访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))

我不太确定参数被拒绝的堆栈级别 - 我甚至不知道参数是否甚至到达BLE设备。 但是,由于我可以写入其他GATT服务并从GAP特性中读取,我相信它就是设备。

任何人都可以看到一个万无一失的方法来发现这个问题的来源吗?

谢谢托马斯

我以前遇到过这个问题。 看来微软并不喜欢你写给GAP。

我建议您构建Gatt.XML,使其仅包含GAP中的“名称”和“外观”服务(仅限这两项服务),然后将其余特征放在自定义服务或标准服务下。

如果您尝试写入自定义服务下启用了写入功能的特性,它应该可以工作。

简介:您无法在GAP下写入特征。

参考:重构我的设备的Gatt.XML为我修复了同样的问题。

其他详细信息:对于这些“拒绝访问”错误,您需要检查:1)您手动编辑了包清单功能,以包含您的Gatt.XML所具有的服务。 您必须指定自定义服务和标准服务。 2)您的Gatt.XML结构正确。 3)您尝试写入的特征存在/设备当前已配对。

干杯,Togepi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM