Xamarin和Raspberry Pi

问题描述 投票:0回答:2

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

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

xamarin xamarin.ios mono xamarin.android raspberry-pi3
2个回答
2
投票

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一起重试或电路中断失败的请求。我不隶属于任何一个人。

最后,在应用程序或服务器上运行的内容无关紧要,它们是两个独立的实体,您最有可能分享的唯一内容是您要交换的数据的合同。


1
投票

我使用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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.