如何知道执行代码的当前操作系统/平台(Android / iOS)

时间:2013-09-02 10:23:12

标签: c# xamarin.ios xamarin.android xamarin

使用Xamarin.Android和Xamarin.iOS,我现在需要共享代码部分中的当前操作系统。无论是enum,int还是字符串,它都无关紧要。

我试过了:

System.Environment.OSVersion

始终" Unix"有一些内核版本信息。

Android上有信息,例如

Android.OS.Build.VERSION

但它需要在Android特定代码部分。 有没有办法知道公共库中的当前操作系统?

3 个答案:

答案 0 :(得分:34)

您也可以尝试这个,它可能是我找到的最佳解决方案:

if(Device.RuntimePlatform == Device.iOS)
{
    //iOS stuff
}
else if(Device.RuntimePlatform == Device.Android)
{

}

答案 1 :(得分:5)

我正在使用DeviceInfo插件。 它支持Android, iOs, Windows Phone Silverlight, Windows Phone RT, Windows Store RT, Windows 10 UWP,效果很好。

可以在PCL中使用它(您必须将插件添加到平台项目和PCL):

var platform = CrossDeviceInfo.Current.Platform;
    switch(platform){
        case Platform.iOS:
            // iOS
            break;
        case Platform.Android:
            // Android
            break; 
    }

这种代码在PCL中不是一个好习惯,最好使用Dependency Injection(此插件使用它)来自定义特定于平台的行为。

答案 2 :(得分:4)

使用反射,尝试检索Monotouch.Version属性的值(以及MfA的等价物:Android.OS.Build.VERSION)。其中一个电话会失败,另一个会成功;这就是你必须使用反射的原因。这是一个真正的运行时检查。

但是,当您的应用程序编译两次时,您可以在编译时修复该值。

#if MONOTOUCH
    var platform = "iOS"
#else
    var platform = "Android"
#endif