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

问题描述 投票:0回答:4

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

我试过这个:

System.Environment.OSVersion

始终是“Unix”,带有一些内核版本信息。

Android 上有一些信息,例如

Android.OS.Build.VERSION

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

c# xamarin.ios xamarin.android xamarin
4个回答
138
投票

您也可以尝试这个,它可能是我发现的最好的解决方案:

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

}

6
投票

我正在使用 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
(这个插件使用它)来自定义平台特定的行为。


3
投票

使用反射,尝试检索

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

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

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

0
投票

更新:

Device.RuntimePlatform
已被弃用。请使用
Microsoft.Maui.Device.DeviceInfo.Platform == DevicePlatform.iOS
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.