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?
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)
{
}
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.
À 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