我正在开发一个通用应用程序,我正在尝试检测它是在台式计算机上运行还是在真实的物联网设备(Raspberry PI 2)上运行。根据建议,我正在尝试使用API合同检查,但即使在桌面计算机上也会返回true
:
ApiInformation.IsApiContractPresent( "Windows.Devices.DevicesLowLevelContract", 1, 0 );
显然,当我尝试拨打GpioController.GetDefault()
时,它会在桌面上失败,但奇怪的是FileNotFoundException
:"The specified module could not be found."
那么检测真实设备的正确方法是什么?
感谢您的帮助,
捷尔吉
修改
在某些桌面上GpioController.GetDefault()
会返回null
,而在其他计算机上却会失败并显示FileNotFoundException
。
修改
我的目标是确保我可以安全地调用任何GPIO或IoT Core特定的API,而无需在任何地方使用try-catch块来处理在非IoT设备上运行时的异常。
答案 0 :(得分:0)
您可以通过
找到运行您应用的设备类型Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily
Microsoft确实建议通过检查功能而不仅仅是检查设备系列来最大限度地扩大通用应用的覆盖范围。 这里有一篇关于这一切的文章: https://msdn.microsoft.com/en-us/library/windows/apps/dn894631.aspx
答案 1 :(得分:0)
这取决于您要检查的“真实设备”的哪个方面。使用API契约信息不是一个好的代理,正如您所发现的那样(虽然它应该在桌面上返回null
而不是崩溃 - 这是一个错误)。使用AnalyticsInfo
可以是一个合理的代理,但是你需要注意随着时间的推移接收新值,而且它实际上是识别操作系统类型而不是物理硬件。枚举硬件设备是检测硬件的最佳方式,但它们可以在用户插入和拔出硬件时动态地进出。
根据答案,你有什么不同的做法?