我试图写入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,但未在用户代码中处理
- 使用ant构build猪的难度
- 我错过了一个明显的Windows服务的替代?
- 如何让IDLE接受Unicode字符的粘贴?
- 用于Windowsapp store的C ++ / CX HTTP Web服务器
- W8电话System.Xml.XmlException与XmlReader
其他信息:访问被拒绝。 (从HRESULTexception:0x80070005(E_ACCESSDENIED))
我不太确定什么级别的堆栈参数被拒绝 – 我甚至不知道参数是否甚至到达BLE设备。 但是,正如我可以写给其他GATT服务并从GAP特性中读取的,我相信这是设备。
任何人都可以看到一个愚蠢的certificate方法来发现这个问题来自哪里?
谢谢Thomas
我之前有过这个问题。 看来微软不喜欢你写给GAP。
我建议你构建Gatt.XML,使其只包含GAP中的“名称”和“外观”服务(只有这两个服务),然后将其余特性放在自定义服务或标准服务之下。
如果您尝试写入在自定义服务下启用写入的特性,则应该可以正常工作。
总结:你不能写GAP下的特性。
参考:重新设计我的设备的Gatt.XML为我解决了这个相同的问题。
额外的细节:对于这些“访问被拒绝”的错误,你想检查:1)你有你的包清单功能手动编辑,以包括您的Gatt.XML有的服务。 您必须指定自定义服务和标准服务。 2)您的Gatt.XML结构正确。 3)您尝试写入的特性是否存在/设备当前是否配对。
干杯,Togepi