C# 在通用Windows应用程序中测试SDK

C# 在通用Windows应用程序中测试SDK,c#,win-universal-app,C#,Win Universal App,我正在创建一个通用windows应用程序,它将在桌面和移动设备上使用。移动设备将使用振动API //Vibrate the device VibrationDevice.GetDefault().Vibrate(TimeSpan.FromMilliseconds(100)); 我已为项目添加了必要的扩展,以实现这一点: 当然,UWP的Windows Mobile扩展将不会出现在桌面计算机上,因此我需要有条件地测试SDK是否可用,以便执行振动方法 基本上,如果应用程序在桌面上运行,我不想执行振

我正在创建一个通用windows应用程序,它将在桌面和移动设备上使用。移动设备将使用振动API

//Vibrate the device
VibrationDevice.GetDefault().Vibrate(TimeSpan.FromMilliseconds(100));
我已为项目添加了必要的扩展,以实现这一点:

当然,UWP的Windows Mobile扩展将不会出现在桌面计算机上,因此我需要有条件地测试SDK是否可用,以便执行
振动
方法

基本上,如果应用程序在桌面上运行,我不想执行
振动
方法,否则我将收到异常:

Encore.Scanner.UI.exe中发生“System.TypeLoadException”类型的异常,但未在用户代码中处理

其他信息:未注册请求的Windows运行时类型“Windows.Phone.Devices.Notification.VibrationDevice”

有没有办法检查SDK是否可用?大概是这样的:

if (...windows mobile extension is present)
{
    //Vibrate the device.    
    VibrationDevice.GetDefault().Vibrate(TimeSpan.FromMilliseconds(100));
}

我找到了我需要的东西。如果将来有人碰到这个问题,我是如何做到这一点的

if (ApiInformation.IsTypePresent("Windows.Phone.Devices.Notification.VibrationDevice"))
{
    ...

这很有帮助!然而,作为通用应用程序框架的一部分,如果该振动代码在不合适的设备上运行,那么它会崩溃吗?它肯定会忽略这个动作吗?@Harvey它可能值得在
stribrationdevice.GetDefault()
上做一个空检查。以防万一。好吧,我会记住这一点,因为我可能永远不会采取这种方法。再次感谢!这是有文档记录的推荐方法:。它将确保震动设备类型存在并且可以调用,但正如Mike所说,您仍然需要检查呼叫是否成功。此外,我刚刚在Windows Phone Emulator上进行了测试。它报告振动是可用的,但是调用振动没有任何作用。所以我认为空检查是不必要的。