2013-09-02 18 views
7

Xamarin.Android ve Xamarin.iOS'u kullanarak, şimdi paylaşılan bir kod bölümündeki mevcut işletim sistemine ihtiyacım var. Bir enum, bir int veya bir dize olsun, önemli değil. Bazı çekirdek sürümü bilgilerle hep "Unix" dirYürütme kodunun geçerli işletim sistemi/platformu nasıl bilinir (Android/iOS)

System.Environment.OSVersion 

:

Bu çalıştı.

Android.OS.Build.VERSION 

gibi örneğin Android'de bilgi vardır Ama Android özgü kod bölümünde olması gerekir. Geçerli işletim sistemini ortak bir kütüphanede tanımanın bir yolu var mı?

+0

Bunu bilgi ile ne yapmak istediğinizi sorabilir miyim? –

+0

[android sdk sürümü nasıl alınır?] Olası kopyası (http://stackoverflow.com/questions/1882883/how-to-retrieve-the-android-sdk-version) – Andrei

+0

@Daniel: Sunucum (veri sağlama) ve servis) 'kimin istekte bulunduğunu bilmesi gerekiyor (günlüğe kaydetme, push bildirimleri, UI için bazı spesifik veriler ...) – Askolein

cevap

4

Yansıma kullanarak, Monotouch.Version özelliğinin değerini (ve MfA: Android.OS.Build.VERSION eşdeğeri) almaya çalışın. Çağrılardan biri başarısız olacak, diğeri başarılı olmalı; Bu yüzden yansımayı kullanmalısın. Bu gerçek bir çalışma zamanı kontrolü için.

Ancak, uygulamanız iki kez derlendiğinden, bu değeri derleme zamanında düzeltebilirsiniz.

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

teşekkürler. Başka bir tane var diye umuyordum. Bunlar, yeni bir platformu (aka pencereleri) elle tutacağınızı gösterir. Gerçekten büyük bir sorun değil ama Xamarin kendi API'sinde suche hizmeti sunmuyor bana garip geliyor. – Askolein

+0

Xamarin iOS 9.6.2, Xamarin Android 6.0.4.0 ve Xamarin Studio 5.10.3 kullanıyorum. MONOTOUCH sembolü mevcut değil. Bu #ifdef her zaman başka birine gider. Evet iOS projesini varsayılan olarak ayarlıyorum. Herhangi bir alternatif? – jzeferino

5

Ben DeviceInfo eklentisi kullanıyorum. Android, iOs, Windows Phone Silverlight, Windows Phone RT, Windows Store RT, Windows 10 UWP'u destekler ve mükemmel çalışır.

Böyle PCL kullanılabilir

(eğer platformu projelerine ve PCL için eklenti eklemeniz gerekir):

kod Bu tür PCL, onun daha iyi bir iyi bir uygulama
var platform = CrossDeviceInfo.Current.Platform; 
    switch(platform){ 
     case Platform.iOS: 
      // iOS 
      break; 
     case Platform.Android: 
      // Android 
      break; 
    } 

değil Platforma özel davranışı özelleştirmek için Dependency Injection kullanın (bu eklenti bunu kullanır).

3

Ayrıca bu deneyebilirsiniz ve muhtemelen en iyi çözüm buldum:

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

}