如何从Xamarin Forms项目中调用Android和iOS项目中可用的方法?

时间:2019-06-13 07:03:36

标签: c# xamarin.forms dependencies

我的Xamarin表单页面上确实有一个按钮。每当单击按钮时,如果设备是Android,我就需要在Android Project中调用方法(在MainActivity.cs中),如果设备是iPhone,则需要在iOS Project中调用方法(在AppDelegate.cs中)。

有人可以帮助我吗?

Xamarin形式的方法

private async void BtnStart_Clicked(object sender, EventArgs e)
{
    //if Android call StartBeepWork in MainActivity.cs else call StartBeepWork in AppDelegate.cs
}

MainActivity.cs和AppDelegate.cs中的方法

public void StartBeepWork()
{
    //process
}

1 个答案:

答案 0 :(得分:4)

这就是DependencyService的作用。因此,您可以在共享项目中定义接口,并针对特定于平台的项目中的每个受支持的平台实施该接口。

public interface IBeepWork
{
    void Start();
}

在您的Android项目中:

[assembly: Dependency(typeof(BeepWorkAndroid))]
public class BeepWorkAndroid : IBeepWork
{
    public void Start()
    {
        // Android-specific implementation
    }
}

您可以对iOS项目执行相同操作:

[assembly: Dependency(typeof(BeepWorkiOS))]
public class BeepWorkiOS : IBeepWork
{
    public void Start()
    {
        // iOS-specific implementation
    }
}

然后在您的代码隐藏中,可以通过调用DependencyService.Get来解析特定于平台的实例:

private async void BtnStart_Clicked(object sender, EventArgs e)
{
    DependencyService.Get<IBeepWork>().Start();
}