Xamarin and Raspberry Pi



我即将开始学习Xamarin,并希望我能被指出正确的方向。目前我可以编写 ASP.Net MVC 5 应用程序。我有兴趣与IOS和Android设备的Raspberry Pi进行通信,从我在网上阅读的内容来看,Mono框架是最好的方法。如果我错了,请纠正我。

我的问题是我是否可以使用Xamarin Forms而不是Xamarin Native UI,以及Mono Framework是否是我可以使用Xamarin Forms实现的东西,或者它是一个完全独立的事情,我需要做而不是Xamarin Forms。我希望这不会太令人困惑,但我只是想了解什么有效,以便我可以为自己创建一个路线图。

Raspberry Pi(RPi)可以运行Android,只有这样你才能利用Xamarin提供的功能。在这种情况下,您将能够制作Xamarin.Android应用程序并在RPi上运行它。

但是,您希望在 RPi 上运行某种服务器,并与 iOS 或 Android 设备上的应用进行通信,这将运行 Xamarin 应用。 在这里,此应用是否使用Xamarin.Forms并不重要。

服务器端

您可以在Raspberry Pi的服务器端做什么,这对您来说可能是最简单的。是下载并安装Windows 10 IoT Core。然后,您可以在其上运行 ASP.NET WebAPI或MVC应用程序。

或者,您可以在Raspbian或RPi上运行的任何其他基于Linux的发行版上执行此操作,只需使用.NET Core即可。

这两种解决方案都使您能够在服务器和客户端之间共享序列化协定。

手机应用端

在电话上,您只需要一个客户端与RPi上的服务器通信。有几篇非常好的文章介绍了在使用 Xamarin 时编写可复原的 API 客户端(无论您是否使用窗体)都无关紧要。

这是个人偏好,但我将使用 Refit 来定义服务器的 API。与 Polly 一起重试或断路失败的请求。我与其中任何一个都没有关系。

最后,在应用程序或服务器上运行什么并不重要,它们是两个独立的实体,您最有可能共享的唯一内容是您正在交换的数据的合同。

我使用Raspberry Pi作为我的主计算机。我使用 MonoDevelop 编写 C# 程序,并使用 mono 来运行它们。我使用System.Windows.Forms作为我的GUI。完成后,我有一个可以在Raspberry Pi或Windows上运行的.exe。我有一个类可以帮助我在运行时向窗体添加控件。

public static class ControlCreator
{
public static void Add(this Control.ControlCollection collection
,out GroupBox box,string id, string text, int left, int top
, int width, int height)
{
box = new GroupBox();
box.Text = text;
AddControl (collection,box,id,left,top,width,height);
return;
}
public static void Add(this Control.ControlCollection collection
,out Button box,string id, string text, int left, int top
, int width, int height)
{
box = new Button();
box.Text = text;
AddControl (collection,box,id,left,top,width,height);
return;
}
public static void Add(this Control.ControlCollection collection
,out Label box,string id, string text, int left, int top
, int width, int height)
{
box = new Label();
box.Text = text;
AddControl (collection,box,id,left,top,width,height);
return;
}
private static void AddControl(
Control.ControlCollection collection,Control box,string id, int left
, int top, int width, int height)
{
box.Name = id;
box.Left = left;
box.Top = top;
box.Width = width;
box.Height = height;
collection.Add(box);
return;
}
}

最新更新