检测UWP应用程序中存在哪些API

时间:2015-12-17 19:12:18

标签: c# windows-phone uwp detection windows-10-universal

了解为什么不建议检测设备类型以执行运行时功能,最佳实践要求检测哪些API存在。这样,例如,以桌面模式运行平板电脑的用户将不会遇到不期望的行为。此外,由于硬件是如此动态,因此检查用户交互(如触摸功能)也不是一种好方法。

在我们的项目中,我们决定确定三种不同屏幕宽度所需的API - 小型,中型和大型。 Microsoft列出了这些API here。但是这个列表相当长,检查每个列表的存在会很麻烦。

对于如何执行这些检查而不为Microsoft提供的API列表中的每个合同重复调用ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")的任何建议,我们将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您通常只需在需要特定API的代码周围添加检查:

if(ApiInformation.IsEventPresent("Windows.Phone.UI.Input.HardwareButtons", "BackPressed"))
{
    HardwareButtons.BackPressed += OnHardwareButtonsBackPressed;
}

如果您知道有多个代码块需要相同的API,则可以缓存该值。

另一种方法是立即检查整个合同。如果您知道自己需要打电话,而不是检查每个事件或方法电话,只需检查合同即可。

ApiInformation.IsApiContractPresent("Windows.ApplicationModel.Calls.CallsPhoneContract");

"不知道"您的客户可能需要的是“非问题”。该问题的答案是YAGNI。不要检查合同,除非您正在实施它。

答案 1 :(得分:0)

实际上,我正在为移动和桌面设备的UWP和合同开发应用程序 如果您在桌面上安装了Skype,则“ Windows.ApplicationModel.Calls.CallsPhoneContract”将是可找到的Api合同。

要真正确保您只是打算与电话签约,应该使用以下代码:

ApiInformation.IsApiContractPresent("Windows.Phone.PhoneContract",1,0)

这是Windows Phone的独家合同。

我还添加了一个从调试会话中截取的屏幕快照的证明,以证明即使不考虑文档中的内容,也可以在桌面上找到“ Windows.ApplicationModel.Calls.CallsPhoneContract”。

enter image description here

我也刚刚将此问题报告给了Microsoft Here at githubhere at microsoft documentation

希望此答案对每个人都有帮助,如果您要为台式机和移动设备构建应用程序,请使用此合同,而不是“ Windows.Phone.PhoneContract”。