微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Xamarin表单项目中使用Xamarin Android dll 示例:

如何解决在Xamarin表单项目中使用Xamarin Android dll 示例:

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

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

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

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

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

还是我必须为提供可在Forms项目中使用的接口的硬件dll写某种外观?

解决方法

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

并非真的-就像您提到的:它是与硬件相关的组件,通常适用于Android系统。

然后;您并不需要,您可以在第二个问题中解决该问题:

还是我必须为提供可在Forms项目中使用的接口的硬件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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。