1. 程式人生 > >Xamarin Form呼叫各個平臺方法

Xamarin Form呼叫各個平臺方法

Xamarin

不同平臺的執行程式碼

有時候需要在不同的平臺上,執行不同的程式碼,下面就看是說明這個需求怎麼實現。

在共享的目錄中處理邏輯

Xamarin.Forms中,有這些指令可以使用:#if, #elif, and endif.來看一下程式碼

#if __IOS__
using UIKit;

#elif __ANDROID__
using Android.OS;

#elif WINDOWS_APP || WINDOWS_PHONE_APP || WINDOWS_UWP
using Windows.Security.ExchangeActiveSyncProvisioning;

#endif

這就是一個完整的體系,這些指令不止作用於開頭,類裡面也是可以使用的。

使用各個平臺的共同類

如果要實現在不同平臺呼叫不同平臺的類,則需要在每個平臺的工程上都要新建一個共同類,類名、方法和名稱空間,要完全一致。

Xamarin Forms

    PlatformInfo platformInfo = new PlatformInfo();

IOS

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);
        }
    }
}

Android

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類來呼叫,各個平臺的方法。

怎麼做?

1.在Xamarin Forms平臺上建立一個介面,讓各個平臺來實現該介面

2.每個平臺實現了該介面後,必須註冊在Dependency屬性上

3.在Xamarin Forms中,使用DependencyService類的Get方法就可以呼叫了

程式碼

IPlatformInfo platformInfo = DependencyService.Get<IPlatformInfo>(); 
modelLabel.Text = platformInfo.GetModel();
versionLabel.Text = platformInfo.GetVersion();