2013-09-02 59 views
7

Sử dụng Xamarin.Android và Xamarin.iOS, tôi cần phải là hệ điều hành hiện tại trong phần mã được chia sẻ. Có thể là một enum, một int hoặc một chuỗi, nó không quan trọng.Cách biết hệ điều hành/nền tảng hiện tại của mã thực thi (Android/iOS)

Tôi cố gắng này:

System.Environment.OSVersion 

nào luôn "Unix" là với một số thông tin phiên bản kernel.

Có thông tin về Android ví dụ như

Android.OS.Build.VERSION 

Nhưng nó cần phải được trong phần mã cụ thể Android. Có cách nào để biết hệ điều hành hiện tại trong một thư viện chung không?

+0

Tôi có thể hỏi những gì bạn muốn làm gì với thông tin đó? –

+0

bản sao có thể có của [Cách truy xuất phiên bản sdk android?] (Http://stackoverflow.com/questions/1882883/how-to-retrieve-the-android-sdk-version) – Andrei

+0

@Daniel: máy chủ của tôi (cung cấp dữ liệu và dịch vụ) cần biết 'ai' đang đưa ra yêu cầu (ghi nhật ký, thông báo đẩy, một số dữ liệu cụ thể cho giao diện người dùng ...) – Askolein

Trả lời

4

Sử dụng phản chiếu, cố truy xuất giá trị của thuộc tính Monotouch.Version (và tương đương với MfA: Android.OS.Build.VERSION). Một trong những cuộc gọi sẽ thất bại, người kia sẽ thành công; đó là lý do tại sao bạn phải sử dụng sự phản chiếu. Đó là để kiểm tra thời gian thực.

Nhưng khi ứng dụng của bạn được biên dịch hai lần, bạn có thể sửa giá trị đó tại thời gian biên dịch.

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

cảm ơn những giải pháp đó. Tôi hy vọng một người khác tồn tại. Những người có nghĩa là bạn xử lý bất kỳ nền tảng mới (aka cửa sổ) bằng tay. Không phải là một vấn đề lớn thực sự nhưng có vẻ lạ với tôi rằng Xamarin không cung cấp dịch vụ như vậy trong API của nó. – Askolein

+0

Im sử dụng Xamarin iOS 9.6.2, Xamarin Android 6.0.4.0 và Xamarin Studio 5.10.3. Biểu tượng MONOTOUCH không tồn tại. Điều đó #ifdef luôn luôn đi đến người khác. Có im thiết lập dự án iOS như mặc định. Bất kỳ thay thế nào? – jzeferino

5

Tôi đang sử dụng plugin DeviceInfo. Nó hỗ trợ Android, iOs, Windows Phone Silverlight, Windows Phone RT, Windows Store RT, Windows 10 UWP và nó hoạt động hoàn hảo.

Nó có thể được sử dụng trong PCL như thế này (bạn phải thêm các plugin cho các dự án nền tảng và PCL):

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

loại mã này không phải là một thực hành tốt trong PCL, nó tốt hơn để sử dụng Dependency Injection (plugin này sử dụng) để tùy chỉnh hành vi cụ thể của nền tảng.

3

Bạn cũng có thể thử điều này và có lẽ nó là giải pháp tốt nhất mà tôi tìm thấy:

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

}