如何在Windows 10上获取设备平台

Dar*_*s V 16 xbox windows-phone windows-10

由于一个发布二进制文件将在pc,xbox和phone上运行,我需要一种在运行时获取设备类型的方法.

通过检查ApiInformation目前的类型,方法等是可行的,但我相信应该有一种更可靠的方式.

Mat*_*cey 9

目前(使用2015年3月23日发布的预览工具)没有一种简单的方法可以做到这一点,除了(如你所述)使用ApiInformation方法来检测只存在于你所追求的特定平台上的事物的实现.

如果有一些帮助者这样做会很好,如果没有最终工具,我肯定有些人会被社区中有帮助的人创建.

但是,有一个很好的理由不这样做,因为它鼓励对设备做出广泛的假设.

如果可以说"我在电话上跑吗?" 然后,如果您得到"是"的响应,那么很容易对该设备的可能性做出假设,但并非所有手机都具有相同的功能.
对于手机和小型平板电脑来说,似乎会有一个Windows 10的"移动"版本.如果你能说"我是'移动'版本吗?" 然后再次,这不会回答你所有的问题,你仍然必须检查单个API的可用性,因为便宜的平板电脑和高端手机的功能可能会大不相同.(在设备上包含物理按钮和拨打电话的能力是两个明显的例子.)进一步扩展这一点有很多场景,你可以将不同的平台视为与所有平台上的功能相同.在这种情况下,您的代码会更好地说"这样的API是否可用?",而不是说"我是在桌面,Xbox还是SurfaceHub上运行?".
由于IOT设备可用的功能和功能范围广泛,IOT平台可能会进一步复杂化.

在极少数情况下,您希望了解正在运行的平台,而不是特定的API是否可用.希望通过仅暴露API可用性,Microsoft鼓励开发人员考虑检查他们实际需要的内容,而不是依赖于广泛的,可能不完整的设备分类.

就像您不知道正在运行什么平台或浏览器的Web开发一样,您不应该检测平台并假设设备将具有哪些功能,您应该检测是否支持您需要的特定功能/在设备上启用/启用它或在​​您的应用中公开相关的UI.


Pet*_*SFT 7

[编辑7月3日用当前信息替换//构建时代信息]

虽然您可以通过使用ApiInformationAPI来检测API 来尝试推断您所使用的设备,但这是一个非常糟糕的解决方案,因为API可以随着时间的推移添加到设备中.请不要这样做; 你未来的自我(或你的替代;-))会感谢你.

如果您确实需要以编程方式检测正在运行的设备系列(在大多数情况下您没有),那么您可以使用AnalyticsInfo.VersionInfo.DeviceFamliy.这将返回一个字符串,其中没有已发布的标准值集,因为可以随时引入或停用设备系列.

如果您想为每个设备系列提供不同的资源(字符串,图像,XAML文件,HTML页面等),那么您不需要在代码中检测设备系列; 相反,您可以使用MRT限定符DeviceFamily(例如Logo.DeviceFamily-Mobile.png).只需确保在应用程序在您以前从未听说过的设备系列上运行时,始终有一个备用资源(图像,字符串等).并且不要陷入假设"桌面需要比移动设备更高资产"这样的事情的陷阱,因为这通常是不正确的.


小智 7

似乎有一个新的API来检测设备系列: Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily

您可以在此处找到更多信息:https://msdn.microsoft.com/en-us/library/windows/apps/dn705767.aspx

更新:

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

  • "Windows.System.Profile"``AnalyticsInfo``属性的用途是用于诊断日志记录.您应该将它们视为您在运行时不在客户端上解析的不透明字符串*.依靠这个作为您的平台检测是脆弱的. (3认同)