有時候須要在不一樣的平臺上,運行不一樣的代碼,下面就看是說明這個需求怎麼實現。ui
在共享的目錄中處理邏輯spa
在Xamarin.Forms
中,有這些指令能夠使用:#if, #elif, and endif.
來看一下代碼code
#if __IOS__ using UIKit; #elif __ANDROID__ using Android.OS; #elif WINDOWS_APP || WINDOWS_PHONE_APP || WINDOWS_UWP using Windows.Security.ExchangeActiveSyncProvisioning; #endif
這就是一個完整的體系,這些指令不止做用於開頭,類裏面也是能夠使用的。orm
若是要實如今不一樣平臺調用不一樣平臺的類,則須要在每一個平臺的工程上都要新建一個共同類,類名、方法和命名空間,要徹底一致。接口
Xamarin Formsstring
PlatformInfo platformInfo = new PlatformInfo();
IOSit
using System; using UIKit; namespace PlatInfoSap2 { public class PlatformInfo { UIDevice device = new UIDevice(); public string GetModel() { return device.Model.ToString(); } public string GetVersion() { return String.Format("{0} {1}", device.SystemName, device.SystemVersion); } } }
Androidio
using System; using Android.OS; namespace PlatInfoSap2 { public class PlatformInfo { public string GetModel() { return String.Format("{0} {1}", Build.Manufacturer, Build.Model); } public string GetVersion() { return Build.VERSION.Release.ToString(); } } }
一個庫一般不能訪問應用程序項目中的類,那麼咱們是能夠使用DependencyService
類來調用,各個平臺的方法。form
怎麼作?class
1.在Xamarin Forms
平臺上建立一個接口,讓各個平臺來實現該接口
2.每一個平臺實現了該接口後,必須註冊在Dependency
屬性上
3.在Xamarin Forms
中,使用DependencyService
類的Get
方法就能夠調用了
代碼
IPlatformInfo platformInfo = DependencyService.Get<IPlatformInfo>(); modelLabel.Text = platformInfo.GetModel(); versionLabel.Text = platformInfo.GetVersion();