蓝牙低功耗连接参数更新 – 引起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中发生types“System.UnauthorizedAccessException”的exception,但未在用户代码中处理

其他信息:访问被拒绝。 (从HRESULTexception:0x80070005(E_ACCESSDENIED))

我不太确定什么级别的堆栈参数被拒绝 – 我甚至不知道参数是否甚至到达BLE设备。 但是,正如我可以写给其他GATT服务并从GAP特性中读取的,我相信这是设备。

任何人都可以看到一个愚蠢的certificate方法来发现这个问题来自哪里?

谢谢Thomas

我之前有过这个问题。 看来微软不喜欢你写给GAP。

我建议你构建Gatt.XML,使其只包含GAP中的“名称”和“外观”服务(只有这两个服务),然后将其余特性放在自定义服务或标准服务之下。

如果您尝试写入在自定义服务下启用写入的特性,则应该可以正常工作。

总结:你不能写GAP下的特性。

参考:重新设计我的设备的Gatt.XML为我解决了这个相同的问题。

额外的细节:对于这些“访问被拒绝”的错误,你想检查:1)你有你的包清单功能手动编辑,以包括您的Gatt.XML有的服务。 您必须指定自定义服务和标准服务。 2)您的Gatt.XML结构正确。 3)您尝试写入的特性是否存在/设备当前是否配对。

干杯,Togepi