在 Xamarin.Forms 中使用 Android 绑定

Posted

技术标签:

【中文标题】在 Xamarin.Forms 中使用 Android 绑定【英文标题】:Use Android binding in Xamarin.Forms 【发布时间】:2020-09-30 03:37:39 【问题描述】:

我正在尝试使用 Xamarin.Forms 构建应用程序。我想使用 Google ML Kit,所以我找到了 android 的绑定。

我能够将引用导入 Xamarin.Forms 解决方案的 Android 部分,并希望在 UI 后面的代码中使用它。

但是在in 项目中,当我执行using Xamarin.Firebase.ML.Vision; 时,当然会出错,因为引用在in.Android 项目中。我是否试图在 Xamarin 中做一些反模式的事情?

【问题讨论】:

使用自定义渲染器或 DependencyService 在 XF 中使用特定于平台的代码。两者都记录在 Xamarin 网站上 提醒您注意,Firebase.ML 和 Firebase ML Kit 是两个不同的库。在 github 上看到这个问题。简而言之,android 库仅涵盖 Firebase.ML(基于云的机器学习)而不是 ML Kit(用于设备机器学习)。见here。我在我的 ios 答案中链接的绑定库似乎是 ML Kit,但没有 android 等价物。 【参考方案1】:

Xamarin.Firebase.ML.Vision 是一个 Xamarin.Android 特定的库。 Xamarin.Forms 不存在。如前所述,您需要使用DependencyService 来启动特定于平台的实现。在这种情况下,Activity 实现了您需要的 Xamarin.Firebase.ML.Vision 代码。

public interface IVisionImplementer

    void StartActivity();

然后在您的Xamarin.Android 项目中。

[assembly: Dependency(typeof(VisionImplementer))]
public class VisionImplementer : IVisionImplementer

    public void StartActivity()
    
        ///FirebaseActivity is where you will implement the actual vision code you're trying to implement.
        var intent = new Intent(Android.App.Application.Context, typeof(FirebaseVisionActivity))
        intent.SetFlags(ActivityFlags.NewTask);
        Android.App.Application.Context.StartActivity(intent);

Xamarin.Forms 使用:

var visionImplementer = DependencyService.Get<IVisionImplementer>();
visionImplementer.StartActivity();

就是这样。还有适用于 iOS 的 library,因此您可以为您的 iOS 项目做同样的事情。

【讨论】:

以上是关于在 Xamarin.Forms 中使用 Android 绑定的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.Forms 中使用 Android 绑定

在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题

使用Xamarin Forms播放视频

Xamarin.Forms:Forms.Context 已过时

如何使用 ScnViewGestures.Forms 在 Xamarin.Forms 中使用 TouchDown 和 TouchUp 事件创建视图

在 Xamarin.Forms 中使用 ToptabbedPage 时出现意外的白色按钮