我正在开发一个通用应用程序,并试图检测它是在桌面计算机上运行,还是在真正的IoT设备上运行(Raspberry 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核心特定的API,而无需在任何地方使用尝试捕获块来处理异常。
发布于 2015-11-20 13:00:36
您可以找到应用程序正在运行的设备的类型。
Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily微软确实建议通过检查通用应用程序的功能,而不是仅仅检查设备家族的功能,从而最大限度地利用通用应用程序。这里有一篇关于这一切的文章:https://msdn.microsoft.com/en-us/library/windows/apps/dn894631.aspx
发布于 2015-11-20 14:08:52
这取决于您想要检查的“真正设备”的哪个方面。正如您已经发现的那样,使用API合同信息不是一个好的代理(尽管它应该返回null,而不是崩溃,在桌面上--这是一个错误)。使用AnalyticsInfo可能是一个合理的代理,但随着时间的推移,您必须小心地接收新值,而且它实际上标识的是OS类型,而不是物理硬件。枚举硬件设备是检测硬件的最佳方法,但它们可以在用户插件和解锁时动态地进出。
根据答案,你希望采取什么不同的做法?
https://stackoverflow.com/questions/33701507
复制相似问题