2017-04-14 13 views
0

Ich wollte gerade Xamarin zum ersten Mal lernen und hoffte, dass ich in die richtige Richtung zeigen konnte. Momentan kann ich ASP.Net MVC 5 Anwendungen schreiben. Ich bin daran interessiert, mit einem Raspberry Pi für IOS und Android-Geräte zu kommunizieren und aus dem, was ich online gelesen habe, ist das Mono-Framework der beste Ansatz dafür. Bitte korrigieren Sie mich, falls ich falsch liege.Xamarin und Raspberry Pi

Meine Frage ist, wenn ich Xamarin Forms im Gegensatz zu Xamarin Native UI verwenden kann und wenn Mono Framework etwas ist, das ich mit Xamarin Forms implementieren kann oder ist es eine ganz andere Sache, die ich stattdessen Xamarin Forms tun muss. Ich hoffe, das ist nicht zu verwirrend, aber ich versuche nur zu verstehen, was mit was funktioniert, damit ich mir eine Roadmap erstellen kann.

+0

XF ist eine UI-Ebene für Android und iOS. Es läuft nicht auf dem RPi. Sie können Webservices in jeder Sprache schreiben, die auf dem PI ausgeführt wird, und mit XF-Apps kommunizieren, die unter Android/iOS ausgeführt werden. – Jason

+0

Ich verstehe, was Sie mit Xamarin Forms als die UI-Schicht sagen und von dem, was ich lese, Xamarin, IOS und Xamarin.Android sind auf Mono gebaut. Ist das für Xamarin Forms dasselbe? – Andy

+0

XF läuft auf X.iOS und X.Android – Jason

Antwort

2

Der Raspberry Pi (RPi) kann Android laufen und nur dann können Sie nutzen, was Xamarin bietet. In diesem Fall könnten Sie eine Xamarin.Android App erstellen und auf dem RPi ausführen.

Sie möchten jedoch eine Art Server auf dem RPi ausführen und mit einer App auf einem iOS- oder Android-Gerät kommunizieren, auf dem eine Xamarin-App ausgeführt wird. Hier ist es egal, ob diese App Xamarin.Forms verwendet oder nicht.

Server-Seite

Was Sie Server-Seite auf dem Raspberry Pi tun konnte, was wahrscheinlich die einfachste für Sie wäre. Ist zum Herunterladen und Installieren von Windows 10 IoT Core. Dann können Sie eine ASP.NET-WebAPI- oder MVC-App darauf ausführen.

Alternativ können Sie dies auch auf Raspbian oder einer anderen Linux-basierten Distribution tun, die auf dem RPi läuft und stattdessen nur .NET Core verwendet.

Beide Lösungen bieten Ihnen die Möglichkeit, Serialisierungsverträge zwischen Server und Client zu teilen.

Phone App Side

Am Telefon würden Sie nur einen Client mit dem Server, auf dem RPI, Kommunikation haben. Es gibt mehrere sehr gute Artikel zum Schreiben von resilienten API-Clients bei der Verwendung von Xamarin (egal, ob Sie Forms verwenden oder nicht).

Dies ist eine persönliche Vorliebe, aber ich würde Refit verwenden, um die API für den Server zu definieren. Zusammen mit Polly, um fehlgeschlagene Anfragen erneut zu versuchen oder zu unterbrechen. Ich bin mit keinem von denen verbunden.

Am Ende spielt es keine Rolle, was in der App oder auf dem Server läuft, sie sind zwei getrennte Entitäten und das einzige, was Sie wahrscheinlich teilen werden, sind die Verträge für die Daten, die Sie austauschen.

+0

Danke für die Erklärung. Dies hilft viel – Andy

0

Ich benutze einen Raspberry Pi als meinen Hauptcomputer. Ich benutze MonoDevelop, um C# -Programme zu schreiben und Mono, um sie auszuführen. Ich verwende System.Windows.Forms für meine GUI. Wenn ich fertig bin, habe ich eine .exe, die auf dem Raspberry Pi oder Windows laufen kann. Ich habe eine Klasse, die mir hilft, zur Laufzeit Steuerelemente zum Formular hinzuzufügen.

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; 
    } 
}