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

Posted

技术标签:

【中文标题】如何从 Xamarin Forms 项目调用 Android 和 iOS 项目中可用的方法?【英文标题】:How to call the method available in Android and iOS project from Xamarin Forms project? 【发布时间】:2019-06-13 07:03:36 【问题描述】:

我的 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】:

这就是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();

【讨论】:

是的。这就是我要找的。谢谢你的例子。 请帮帮我。我需要做完全相反的事情。我需要调用save方法,它位于android项目的公共项目中,我该怎么做?

以上是关于如何从 Xamarin Forms 项目调用 Android 和 iOS 项目中可用的方法?的主要内容,如果未能解决你的问题,请参考以下文章

从 ViewModel 构造函数 Xamarin.Forms 调用异步方法

如何从 Xamarin Forms ListView 中删除项目?

Xamarin.Forms 如何将数据从 CollectionView 传输到不同的视图?

如何从列表Xamarin Forms中获取所选项目?

如何从解决方案中的文件加载 XML 文件,使用嵌入式资源构建?项目 > 跨平台 > Xamarin.Forms

如何从 Xamarin Forms 中的自定义 ViewCell 获取 ListView 项目索引?