45

使用 Xamarin.Android 和 Xamarin.iOS,我现在需要共享代码部分中的当前操作系统。无论是枚举、整数还是字符串,都没有关系。

我试过这个:

System.Environment.OSVersion

总是带有一些内核版本信息的“Unix”。

有关于 Android 的信息,例如

Android.OS.Build.VERSION

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

4

3 回答 3

110

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

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

}
于 2017-06-20T12:24:41.600 回答
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(这个插件使用它)来自定义平台特定的行为。

于 2016-05-18T10:55:36.423 回答
3

使用反射,尝试检索Monotouch.Version属性的值(以及 MfA 的等效项:Android.OS.Build.VERSION)。一个调用将失败,另一个应该成功;这就是为什么你必须使用反射。这是一个真正的运行时检查。

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

#if MONOTOUCH
    var platform = "iOS"
#else
    var platform = "Android"
#endif
于 2013-09-02T12:30:58.030 回答