【问题标题】:Use Xamarin Android dll in Xamarin forms project在 Xamarin 表单项目中使用 Xamarin Android dll
【发布时间】:2020-10-08 19:55:14
【问题描述】:

我想创建一个 Xamarin 表单(仅限 Android)项目(XAML UI、数据绑定等)。但是我的项目在我想访问的特殊硬件上运行。

制造商提供适用于 Xamarin (dll) 的 SDK。当我在 Xamarin Android 应用程序中使用它时,它按预期工作。

是否可以将此 DLL 添加到表单项目中? 只需将 dll 添加到表单项目中即可(项目构建),但在代码中使用它是另一回事。

我从一开始就失败的两件事是: dll 有一个工厂方法来创建硬件访问对象。这需要一个 Android.Content.Context(通常是使用该元素的活动)和一个接口作为参数。接口(我必须在我的表单中实现)必须实现IJavaObject 和一种回调方法。

我没有源代码(只有 dll),所以我不能简单地创建一些可以在表单项目中引用的接口。

或者我是否必须为硬件 dll 编写一种外观,以提供我可以在表单项目中使用的接口?

【问题讨论】:

  • 为什么不直接使用Xamarin.Android 而不是Xamarin.Forms
  • @WSC 正如我在 XAML UI、绑定和未来的 MAUI 问题中所写的那样

标签: c# android xamarin xamarin.forms


【解决方案1】:

是否可以将此 DLL 添加到表单项目中?只需将 dll 添加到表单项目中即可(项目构建),但在代码中使用它是另一回事。

并非如此 - 正如您所提到的:它是通常适用于 Android 系统的硬件相关组件。

并且;您实际上不必这样做,您在第二个问题中解决了这个问题:

或者我是否必须为硬件 dll 编写一种外观,以提供我可以在表单项目中使用的接口?

是的,我将创建一个示例。

如果您想从Forms 项目访问组件,您可以轻松地创建一个带有接口的包装器并从您的Forms 项目中调用它。

这很好,如果将来它可以在其他硬件上使用 - 您只需要添加实现即可。

示例:


在android项目中:

[assembly: Xamarin.Forms.Dependency(typeof(NativeHelper))]
namespace Connector.Droid
{  
    public class NativeHelper : INativeHelper
    {
        public void CloseApp()
        {
            Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
        }

        public MemStats GetMemStats()
        {
            return new MemStats()
            {
                Max = Java.Lang.Runtime.GetRuntime().MaxMemory(),
                Free = Java.Lang.Runtime.GetRuntime().FreeMemory(),
                Total = Java.Lang.Runtime.GetRuntime().TotalMemory()
            };
        }
    }
}

Forms项目中,定义接口:

public interface INativeHelper
{
    void CloseApp();
    MemStats GetMemStats();
}

然后这样称呼它:

Xamarin.Forms.DependencyService.Get<INativeHelper>().CloseApp();

【讨论】:

  • 谢谢——这就是我害怕的——我必须写一个门面——它只是调用程序集中的方法。也适用于那里定义的数据类。希望我不需要太多这些元素 - 程序集有大约 200 个公共方法、40 个类/结构,其中一些有超过 10 个属性:-)
猜你喜欢
  • 2018-02-15
  • 2019-11-12
  • 2016-12-22
  • 2021-06-16
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多