web-dev-qa-db-fra.com

Comment connaître l'OS / la plate-forme actuelle du code d'exécution (Android / iOS)

En utilisant Xamarin.Android et Xamarin.iOS, j'ai maintenant besoin du système d'exploitation actuel dans une section de code partagé. Que ce soit une énumération, un int ou une chaîne, cela n'a pas d'importance.

J'ai essayé ceci:

System.Environment.OSVersion

Qui est toujours "Unix" avec quelques informations sur la version du noyau.

Il y a des informations sur Android par exemple comme

Android.OS.Build.VERSION

Mais il doit être dans la section de code spécifique Android. Existe-t-il un moyen de connaître le système d'exploitation actuel dans une bibliothèque commune?

27
Askolein

Vous pouvez également essayer ceci et c'est probablement la meilleure solution que j'ai trouvée:

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

}
46
maulik sakhare

J'utilise DeviceInfo plugin. Elle supporte Android, iOs, Windows Phone Silverlight, Windows Phone RT, Windows Store RT, Windows 10 UWP et cela fonctionne parfaitement.

Il peut être utilisé dans PCL comme ceci (vous devez ajouter le plugin aux projets de plateforme et à PCL):

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

Ce type de code n'est pas une bonne pratique dans PCL, il vaut mieux utiliser Dependency Injection (ce plugin l'utilise) pour personnaliser le comportement spécifique à la plateforme.

5
jzeferino

À l'aide de la réflexion, essayez de récupérer la valeur de Monotouch.Version propriété (et l'équivalent pour MfA: Android.OS.Build.VERSION). L'un des appels échouera, l'autre devrait réussir; c'est pourquoi vous devez utiliser la réflexion. C'est pour une vraie vérification de l'exécution.

Mais comme votre application est compilée deux fois, vous pouvez corriger cette valeur au moment de la compilation.

#if MONOTOUCH
    var platform = "iOS"
#else
    var platform = "Android"
#endif
4
Stephane Delcroix