簡體   English   中英

在Xamarin.forms項目中使用Xamarin Android dll

[英]Use Xamarin Android dll in Xamarin forms project

我想創建一個 Xamarin.forms(僅限 Android)項目(XAML UI、數據綁定等)。 但是我的項目運行在我想要訪問的特殊硬件上。

制造商為Xamarin(dll)提供了SDK。 當我在 Xamarin Android 應用程序中使用它時,它按預期工作。

是否可以將這個DLL添加到forms項目中? 只需將 dll 添加到 forms 項目即可(項目構建),但在代碼中使用它是另一回事。

我從一開始就失敗的兩件事是:dll 有一個工廠方法來創建硬件訪問 object。這需要一個 Android.Content.Context(通常是使用元素的活動)和一個接口作為參數。 接口(我必須在我的表單中實現)必須實現IJavaObject和一種回調方法。

我沒有源代碼(只有 dll)所以我不能簡單地創建一些我可以在 forms 項目中引用的接口。

或者我是否必須為硬件 dll 編寫一種外觀,提供我可以在 forms 項目中使用的接口?

是否可以將這個DLL添加到forms項目中? 只需將 dll 添加到 forms 項目即可(項目構建),但在代碼中使用它是另一回事。

不是真的 - 正如你提到的那樣:它是一個通常適用於 Android 系統的硬件相關組件。

和; 你真的不必,你在第二個問題中解決了這個問題:

或者我是否必須為硬件 dll 編寫一種外觀,提供我可以在 forms 項目中使用的接口?

是的,我將創建一個示例。

如果您想從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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM