2017-04-14 210 views
0

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

我的问题是,如果我可以使用Xamarin Forms而不是Xamarin Native UI,并且如果Mono Framework是我可以用Xamarin Forms实现的东西,或者是我需要做的完全独立的事情,而不是Xamarin Forms。我希望这不是太令人困惑,但我只是想了解什么与什么一起工作,以便我可以为自己制定路线图。

+0

XF是Android和iOS的UI层。它不在RPi上运行。您可以使用在PI上运行的任何语言编写Web服务,并与运行在Android/iOS上的XF应用程序进行通信。 – Jason

+0

我明白你在说Xamarin Forms是UI层,从我读的内容,Xamarin,IOS和Xamarin.Android构建在Mono之上。这与Xamarin Forms相同吗? – Andy

+0

XF在X.iOS和X.Android之上运行 – Jason

回答

2

的树莓派(RPI)可以运行Android和只有这样,你将能够利用什么Xamarin提供。在这种情况下,您将能够制作Xamarin.Android应用程序并在RPi上运行它。

然而,要在RPI运行某种服务器和iOS或Android设备,这将运行一个应用程序Xamarin与应用程序进行通信。 这里应用程序是否使用Xamarin.Forms并不重要。

服务器端

,你可以在树莓派,这可能将是最容易为你做什么服务器端。是下载并安装Windows 10 IoT Core。然后你可以运行一个ASP.NET WebAPI或MVC应用程序。

或者你可以做到这一点上Raspbian或在RPI运行的任何其他基于Linux的发行,只是用.NET的核心来代替。

两种解决方案会给你的共享服务器和客户端之间的系列化合同的可能性。

手机应用程序方面

在手机上,你只会有一个客户端上的RPI服务器通信。在使用Xamarin编写弹性API客户端时,有几篇非常好的文章(如果您使用的是Forms,则无关紧要)。

这是个人喜好,但我会用Refit定义服务器的API。随着Polly重试或断路失败的请求。我不附属于任何这些。

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

+0

感谢您的解释。这有助于很多 – Andy

0

我使用Raspberry Pi作为我的主电脑。我使用MonoDevelop编写C#程序和单声道来运行它们。我为我的GUI使用System.Windows.Forms。当我完成后,我有一个可以在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; 
    } 
}