How to detect running on a real device?

亡梦爱人 提交于 2019-12-11 09:06:06

问题


I am working on a universal application, and I am trying to detect whether it runs on a desktop computer or on a real IoT device (Raspberry PI 2). Following the recommendation, I am trying to use API contract checks, however this returns true even on the desktop machine:

ApiInformation.IsApiContractPresent( "Windows.Devices.DevicesLowLevelContract", 1, 0 );

Obviously when I try to call GpioController.GetDefault(), it fails on the desktop, but strangely with a FileNotFoundException: "The specified module could not be found."

So what is the right way to detect a real device?

Thanks for your help,

György

Edit:

On some desktops GpioController.GetDefault() returns null, while on other machines it fails with FileNotFoundException.

Edit:

My goal is to ensure that I can safely call any GPIO or IoT Core specific APIs without using try-catch blocks everywhere to handle exceptions when running on a non-IoT device.


回答1:


You can find the type of device your app is running on by

Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily

Source: https://msdn.microsoft.com/en-us/library/windows/apps/windows.system.profile.analyticsversioninfo.aspx

Microsoft does suggest to maximise your reach with universal apps by checking for capabilities instead of just checking the device family. There's an article about all that here: https://msdn.microsoft.com/en-us/library/windows/apps/dn894631.aspx




回答2:


It depends on what aspect of a "real device" you want to check. Using API Contract information is not a good proxy, as you have found (although it should return null, not crash, on desktop -- that's a bug). Using AnalyticsInfo can be a reasonable proxy but you have to be careful about receiving new values over time, plus it actually identifies the OS type rather than the physical hardware. Enumerating hardware devices is the best way to detect hardware, but they can come and go dynamically as the user plugs and unplugs them.

What is it you are looking to do differently based on the answer?



来源:https://stackoverflow.com/questions/33701507/how-to-detect-running-on-a-real-device

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!