Android Apps mit Xamarin
entwickeln
André Krämer
Softwareentwickler, Trainer, Berater, Microsoft MVP
https://andrekraemer.de | andre@andrekraemer.de | @codemurai
Buch(2019)
E-Book
Der Xamarin Track
Uhzeit Vortrag Sprecher
10:30 –
11:30
Android Apps mit Xamarin entwickeln André Krämer
11:45 –
12:45
Advanced Xamarin.Forms
Xamarin.Forms und PRISM
Gill Cleeren
Siavash Ghassemi
14:15 -
15:15
Mobile app development with Xamarin
and MVVMCross
Martijn van Dijk
15:30 –
16:30
.NET Code Sharing Kerry. W. Lothrop
17:00 –
18:00
Best Practices und Performance-Tipps,
um Ihre Xamarin-App zu verbessern
Sebastian Seidel
18:15 –
19:15
Xamarin apps and the outside world
Xamarin.Forms Apps mit CQRS und
EventSourcing
Gill Cleeren
Siavash Ghassemi
3
Herausforderungen in modernen
Geschäftsanwendungen
Geschäftsanwendungen, wie wir sie kennen …
Screenshot des Open Source Tools Bulk Rename Utility. Screenshot erstellt von André Krämer
Foto:©anyaberkut|Fotolia.com
Foto:©Photographee.eu|Fotolia.com
Foto:©pannawat|Fotolia.com
Typische Business-Apps
• Zeiterfassung
• Reisekosten
• Customer-Relationship-Management (CRM)
• Urlaubsantrag
• Mängeldokumentation
• Vertriebslösungen (z. B. für Vertreter, etc.)
• Frontend für bestehende ERP Lösungen (SAP, ...)
• Frontend für SharePoint
• ...
9
Bis Ende 2017 wird der Bedarf an Enterprise
Mobile Apps die verfügbaren
Entwicklungskapazitäten um den Faktor fünf
übersteigen
Quelle:Gartner|http://www.gartner.com/newsroom/id/3076817
In 2017 haben ¼ der Unternehmen weltweit
keine mobile Apps gebaut.
Quelle:Gartner|http://www.gartner.com/newsroom/id/3076817
Der Hauptgrund ist Ressourcenmangel
Smartphone Marktanteile Q1/2017 (Quelle: IDC)
Android; 85,00%
iOS; 14,70%
Windows
Phone;
0,10%
Rest; 0,10%
Android
iOS
Windows Phone
Rest
Quelle: http://www.idc.com/promo/smartphone-market-share/os (Abgerufen: Juni 2018)
Verteilung der Tablet Betriebssysteme im geschäftlichen Umfeld
(Quelle: Good Technology)
iOS; 64%
Android;
25%
Windows;
11%
iOS
An dr oid
Windo ws
Quelle: https://media.good.com/documents/mobility-index-report-q2-2015.pdf
Herausforderung
• Durch die vielfallt an Geräten muss für unterschiedliche
Betriebssysteme entwickelt werden
• iOS
• Android
• Universal Windows Platform Apps (Windows 10)
• Für Jede Plattform wird anders entwickelt
• iOS: Objective C oder Swift und Xcode
• Android: Java und Android Studio
• UWP: C# / VB.NET oder C++ mit XAML (oder JavaScript + HTML)
Lösungsansätze
Native Entwicklung
Mehrfaches entwickeln
der Apps
• Mehrere Teams
• Mehrere Codezweige
• Unterschiedliche
Werkzeuge
• Swift
• XCode
"• Java
• Android
Studio
Hybrid mit HTML und JavaScript
• Entwicklung mit HTML / JavaScript
• Geteilter Code über mehrere Plattformen
• Darstellung der App in einem rahmenlosen
Browser
• Zugriff auf native APIs über Plugins
Native Wrapper
Webview mit
Ihrer JavaScript /
HTML App
Nativ mit Xamarin
• C# + .NET Framework
• Geteilter Code über mehrere
Plattformen
• Natives UI
• Native Performance
• 100 % der nativen APIs im Zugriff
Geteilte Datenzugriffsschicht (C#)
Geteilte Geschäftslogik (C#)
iOSApp(C#)
UIund
plattformspezifisc
herCode
AndroidApp(C#)
UIundplattform-
spezifischerCode
UWPApp(C#)
UIund
plattformspezifisc
herCode
 " #
Nativ mit Xamarin.Forms
• 40+ Pages und Controls
• XAML oder per Code
• Zwei-Wege-Datenbindung
• Navigation
• Dependency Service
Geteilte Datenzugriffsschicht (C#)
Geteilte Geschäftslogik (C#)
Geteilte UI Schicht (C# / XAML)
 " #
Die Xamarin Plattform
Was ist die Xamarin Platform
• Ursprünglich ein kommerzielles Produkt der Firma Xamarin
• Im Februar 2016 wurde Xamarin von Microsoft gekauft (Abschluss
der Übernahme war Mitte März 2016)
• Seit Visual Studio Update 2015 Update 2 ist Xamarin Bestandteil
aller Visual Studio Versionen (31. März 2016)
• Erlaubt die Entwicklung für Android und iOS mit C# auf der Basis
von Mono
Xamarin Android APIs
Bild:©Xamarin
Alles was mit Objective-C, Swift, oder Java
gemacht werden kann, kann mit Xamarin auch unter
C# in Visual Studio gemacht werden
Architektur von Xamarin.Android
.NET APIs
Android
Binding
Android.* Java.*
Linux Kernel
Mono ART
MCW
ACW
Android Linking
Bild © Xamarin
Debug Build
Release Build
Entwicklungswerkzeuge
Visual Studio for Mac Visual Studio Plugin
VS 2010 und höher
Entwicklungswerkzeuge
Visual Studio 2017
Visual Studio Integration
In einer Solution:
• iOS
• Android
• Windows Phone
• Windows Store
• Universal Windows
PlatformApps (UWP)
Gewohnte Werkzeuge:
• ReSharper
• Team Foundation Server
• ..
Visual Studio Integration
Debugging unter:
• Emulatoren
• Geräten
Integriert in die Toolbar
• Status
• Logs
• Liste von verfügbaren
Geräten
Visual Studio for Mac
• Entwicklungsumgebung für Mac
• Weiterentwicklung von Xamarin Studio
• Intellisense
• Debugger
• Designer
• NuGet Paketmanager
• Ersetzt Xamarin Studio!
Android
Android
Allgemeiner Überblick
Android
• Open Source
• Basisert auf Linux Kernel
• 2007 angekündigt
• Ende 2008 die ersten Geräte
• Smartphones, Tablets, Wearables, etc..
Versionen
• 15 Hauptversionen
• Namen von Süßigkeiten (KitKat, Lollipop, Marshmallow,
Nougtat, Oreo, ...)
• Diverse Hersteller (Sony, Acer, HTC, Samsung, ...)
• Jeder Hersteller ist selbst für die Bereitstellung von Updates
verantwortlich
Android Versionen (Stand Juni 2018)
https://developer.android.com/about/dashboards/index.html
0,30%
0,40%
4,30%
10,30%
4,80%
17,60%
25,50%
22,90%
8,20%
4,90%
0,80%
Anteil
2.3 Ging erbread (APILe vel 10): 0,30 %
4.0 .x Ice Crea m Sandwich(API Lev el1 5): 0,40 %
4.1 - 4.3 Jelly Be an(API Lev el1 6 -1 8): 4,30 %
4.4 KitKat (APILe ve l19 ):1 0,30 %
5.0 Lollipop(API Leve l2 1):4 ,80 %
5.1 Lollipop(API Leve l2 2):1 7,6 0 %
6.0 Marshmallow (APIL eve l23 ):2 5,50 %
7.0 Noug at (APILe vel 24): 22 ,9 0 %
7.1 Noug at (APILe vel 25): 8,20 %
8.0 Ore o(APILe ve l26 ):4,9 0 %
8.1 Ore o(APILe ve l27 ):0,8 0 %
API Level
• Zu jeder Android Version gibt es einen eindeutigen Integerbezeichner è Das API
Level
• Das API Level identifiziert somit die Versionen der verfügbaren Bibliotheken eindeutig
• Das API Level bestimmt auch die Verfügbaren Intents und Permissions
• Zu jeder App können drei API Level konfiguriert werden
• Target Framework à Gegen diese Version wird die App von Xamarin kompiliert
• Minimum Android Version à die niedrigste Version, die von der App unterstütz wird (diese
Information wird zur Laufzeit benötigt)
• Target Android Version à Zielversion der App
André Krämer
Android SDK Manager
X
Der Android SDK Manager
• SDK Tools (Benötigt)
• SDK Manager, AVD Manager, Emulator
• SDK Platform-tools (Benötigt)
• Android Debugging Bridge (adb)
• SDK Platform (Mindestens eine benötigt)
• Alle konfigurierten Versionen müssen installiert sein (Minimum)
• System Image (Empfohlen)
• Images für den Android Emulator
• Android Support Library (Empfohlen)
• Bibliothek, die z. B. Fragments in älteren Android Versionen (bis 1.6)
nachrüstet
• Google Play Services (Empfohlen)
• Client Bibliotheken für Maps, etc.
Demo
Android Hello World mit Visual Studio und Xamarin
Projektüberblick
• Assets
• Mitgelieferte Dateien (Text, Videos, Audio, ...)
• Resources
• Drawable (Bilder)
• Layout (Bildschirmmasken)
• Values (Strings und Styles)
• MainActivity.cs
• Quellcode der ersten Bildschirmmaske
Android Debugging auf dem Emulator
• Google Emulatoren waren früher sehr langsam
• Dank Intel HAXM ist dies heute gelöst
• Falls Hyper-V aktiviert ist: Visual Studio 2017.8 (Preview) und Windows 10 April 2018
Update nutzen (Link zum Blog Post)
• Falls VirtualBox installiert ist: Genymotion
Android Debugging mit einem echten Gerät
• Developer Mode aktivieren
• Einstellungen
à Über das Telefon
à Build-Nummer mehrfach
an-“tappen“
• USB Debugging aktivieren
• Unter Windows: Treiber
des Herstellers installieren!
Android
Konzepte
Activities
• Activities repräsentieren einen Bildschirm
• Es handelt sich dabei um C# Code Dateien
• Jeder Schirm hat eine Activity
• Eine Activity (typischerweise die MainActivity) ist der Einsprungspunkt in
die App (der MainLauncher)
Activity Lifecycle
Quelle: http://developer.android.com/guide/components/activities.html
Activity Lifecycle
• OnCreate
• Erste Methode die Aufgerufen wird. Hier werden Views erstellt und initialisiert
• OnStart
• Folgt auf OnCreate und wird zum aktualisieren von Daten benutzt
• OnResume
• Wird immer aufgerufen wenn die Aktivität sichtbar wird. Der Nutzer kann nun mit der
Activity interagieren. Macht alles „Rückgängig“ was in OnPause gemacht wurde
• OnPause
• Wenn die Activity in den Hintergrund geht. Hier werden Zustandsdaten gespeichert
• OnStop
• Wenn die aktuelle Activity nicht mehr sichtbar ist
• OnRestart
• OnDestroy
Demo
Das habe ich mir gespart
Demo
Activities und Views
Lokale Datenhaltung mit SQLite und EF Core
• SQLite ist eine leichtgewichtige, dateibasierte Datenbank
• Android nutzt intern selbst SQLite zur Datenhaltung
• Die entsprechenden Treiber sind im Betriebssystem bereits enthalten
• Das Entity Framework Core ermöglicht einen leichten Zugriff auf SQLite
Datenbanken
Lokale Datenhaltung mit SQLite und
EFCore
public class SavedItemContext : DbContext
{
private readonly string _path;
public SavedItemContext(string path)
{
_path = Path.Combine(path, "saveditems.db");
}
public DbSet<SavedItem> SavedItems { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder
optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlite($"Filename={_path}");
}
}
Demo
Datenzugriff
ListViews und Adapter
• ListViews zeigen eine Liste / Collection von Daten in einer Listenform an.
• Das Layout der einzelnen Zeilen kann beliebig komplex werden
• Als Datenquelle von ListViews dienen Adapter
• Es gibt folgende Standardadapter:
• ArrayAdapter
• SimpleAdapter
• BaseAdapter
• CursorAdapter
Beispiel: Array Adapter
var persons = new[] {“Wilhelm Brause“, “Hans Dampf“};
var listView =
FindViewById<ListView>(Resource.Id.myListView);
var adapter = new ArrayAdapter(this,
Android.Resource.Layout.SimpleListItem1, persons);
listView.Adapter = adapter;
Demo
Listen und Adapter
Android Intents
• Intents sind “Nachrichtenobjekte“
• Sie werden genutzt um Acitivities oder Services zu starten
• Zwei Typen können unterschieden werden
• Explizite Intents (Starten durch den Klassennamen, meist Activities in der eigenen App)
• Implizite Intents (Starten von Aktionen in anderen Apps)
• Über den IntentChooser kann eine passende Aktivität interaktiv vom Benutzer
ausgesucht werden wenn mehr als eine Aktivität für einen Intent registriert sind.
• Der IntentChooser verhindert auch einen Absturz falls nichts für den Intent
registriert ist
Beispiel: Impliziter Intent „Anruf“ via Intent
Chooser
var uri = Uri.Parse("tel:+49 (0) 1234/56789-0");
var intent = new Intent(Intent.ActionDial, uri);
var chooser = Intent.CreateChooser(intent,
"Womit soll gewählt werden?");
StartActivity(chooser);
Beispiel: Android / 03_AndroidActivityIntentDemo
Beispiel: Impliziter Intent „Browser
Navigation“ via Intent Chooser
var uri = Uri.Parse("http://www.andrekraemer.de");
var intent = new Intent(Intent.ActionView, uri);
var chooser = Intent.CreateChooser(intent,
“Welchen Browser möchten Sie nutzen?");
StartActivity(chooser);
Beispiel: Android / 03_AndroidActivityIntentDemo
Beispiel: Impliziter Intent „Karten“ via Intent
Chooser
var uri = Uri.Parse("geo:51.421458,7.008155");
var intent = new Intent(Intent.ActionView, uri);
var chooser = Intent.CreateChooser(intent,
"Welche Karten-App soll genutzt
werden?");
StartActivity(chooser);
Beispiel: Android / 03_AndroidActivityIntentDemo
Beispiel: Expliziter Intent zur Navigation zu einer internen
Activity
var intent = new Intent(this, typeof (DetailsActivity));
intent.PutExtra("count", 1);
intent.PutExtra("hallo", "welt");
StartActivity(intent);
// In der Zielactivity ...
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
var hallo = Intent.GetStringExtra("hallo");
var count = Intent.GetIntExtra("count", -1);
Beispiel: Android / 03_AndroidActivityIntentDemo
Demo
Intents
Homepage
andre@ andrekraem er.de | http://andrekraem er.de | http://andrekraem er.de/blog | http://github.com /AndreKraem er
Vielen Dank!
Blog
Xing
Facebook
Twitter
Google+
Meine Dienstleistungen
• Schulungen
• ASP.NET / JavaScript / Angular
• Xamarin
• Unit Testing und Refactoring
• TX Text Control
• Team Foundation Server
• .NET Datenzugriff (Entity Framework, NHibernate, Micro O/R Mapper)
• Consulting
• Durchführung von Technologieworkshops
• Code- / Architekturreviews
• Analyse von managed Memory Leaks und Performanceproblemen
• Prototypenentwicklung
• Remote Entwickler-Support
• Projektbegleitendes Coaching
• Beratung bei der Migration von Legacy Technologien (Classic ASP, Visual Basic 6, Gupta Centura, ...) zu .NET
• Softwareentwicklung
• Mobile Apps (Android, iOS, Windows 10)
• Entwicklung von Web-Anwendungen mit ASP.NET und Angular
• Entwicklung von Desktop Anwendungen
• Migration von ASP Classic zu modernen Weblösungen
andre@ andrekraem er.de | https://andrekraem er.de | http://andrekraem er.de/blog | http://github.com /AndreKraem er

Android Apps mit Xamarin entwickeln

  • 1.
    Android Apps mitXamarin entwickeln André Krämer Softwareentwickler, Trainer, Berater, Microsoft MVP https://andrekraemer.de | andre@andrekraemer.de | @codemurai
  • 2.
  • 3.
    Der Xamarin Track UhzeitVortrag Sprecher 10:30 – 11:30 Android Apps mit Xamarin entwickeln André Krämer 11:45 – 12:45 Advanced Xamarin.Forms Xamarin.Forms und PRISM Gill Cleeren Siavash Ghassemi 14:15 - 15:15 Mobile app development with Xamarin and MVVMCross Martijn van Dijk 15:30 – 16:30 .NET Code Sharing Kerry. W. Lothrop 17:00 – 18:00 Best Practices und Performance-Tipps, um Ihre Xamarin-App zu verbessern Sebastian Seidel 18:15 – 19:15 Xamarin apps and the outside world Xamarin.Forms Apps mit CQRS und EventSourcing Gill Cleeren Siavash Ghassemi 3
  • 4.
  • 5.
    Geschäftsanwendungen, wie wirsie kennen … Screenshot des Open Source Tools Bulk Rename Utility. Screenshot erstellt von André Krämer
  • 6.
  • 7.
  • 8.
  • 9.
    Typische Business-Apps • Zeiterfassung •Reisekosten • Customer-Relationship-Management (CRM) • Urlaubsantrag • Mängeldokumentation • Vertriebslösungen (z. B. für Vertreter, etc.) • Frontend für bestehende ERP Lösungen (SAP, ...) • Frontend für SharePoint • ... 9
  • 10.
    Bis Ende 2017wird der Bedarf an Enterprise Mobile Apps die verfügbaren Entwicklungskapazitäten um den Faktor fünf übersteigen Quelle:Gartner|http://www.gartner.com/newsroom/id/3076817
  • 11.
    In 2017 haben¼ der Unternehmen weltweit keine mobile Apps gebaut. Quelle:Gartner|http://www.gartner.com/newsroom/id/3076817 Der Hauptgrund ist Ressourcenmangel
  • 12.
    Smartphone Marktanteile Q1/2017(Quelle: IDC) Android; 85,00% iOS; 14,70% Windows Phone; 0,10% Rest; 0,10% Android iOS Windows Phone Rest Quelle: http://www.idc.com/promo/smartphone-market-share/os (Abgerufen: Juni 2018)
  • 13.
    Verteilung der TabletBetriebssysteme im geschäftlichen Umfeld (Quelle: Good Technology) iOS; 64% Android; 25% Windows; 11% iOS An dr oid Windo ws Quelle: https://media.good.com/documents/mobility-index-report-q2-2015.pdf
  • 14.
    Herausforderung • Durch dievielfallt an Geräten muss für unterschiedliche Betriebssysteme entwickelt werden • iOS • Android • Universal Windows Platform Apps (Windows 10) • Für Jede Plattform wird anders entwickelt • iOS: Objective C oder Swift und Xcode • Android: Java und Android Studio • UWP: C# / VB.NET oder C++ mit XAML (oder JavaScript + HTML)
  • 15.
  • 16.
    Native Entwicklung Mehrfaches entwickeln derApps • Mehrere Teams • Mehrere Codezweige • Unterschiedliche Werkzeuge • Swift • XCode "• Java • Android Studio
  • 17.
    Hybrid mit HTMLund JavaScript • Entwicklung mit HTML / JavaScript • Geteilter Code über mehrere Plattformen • Darstellung der App in einem rahmenlosen Browser • Zugriff auf native APIs über Plugins Native Wrapper Webview mit Ihrer JavaScript / HTML App
  • 18.
    Nativ mit Xamarin •C# + .NET Framework • Geteilter Code über mehrere Plattformen • Natives UI • Native Performance • 100 % der nativen APIs im Zugriff Geteilte Datenzugriffsschicht (C#) Geteilte Geschäftslogik (C#) iOSApp(C#) UIund plattformspezifisc herCode AndroidApp(C#) UIundplattform- spezifischerCode UWPApp(C#) UIund plattformspezifisc herCode  " #
  • 19.
    Nativ mit Xamarin.Forms •40+ Pages und Controls • XAML oder per Code • Zwei-Wege-Datenbindung • Navigation • Dependency Service Geteilte Datenzugriffsschicht (C#) Geteilte Geschäftslogik (C#) Geteilte UI Schicht (C# / XAML)  " #
  • 20.
  • 21.
    Was ist dieXamarin Platform • Ursprünglich ein kommerzielles Produkt der Firma Xamarin • Im Februar 2016 wurde Xamarin von Microsoft gekauft (Abschluss der Übernahme war Mitte März 2016) • Seit Visual Studio Update 2015 Update 2 ist Xamarin Bestandteil aller Visual Studio Versionen (31. März 2016) • Erlaubt die Entwicklung für Android und iOS mit C# auf der Basis von Mono
  • 22.
  • 23.
    Alles was mitObjective-C, Swift, oder Java gemacht werden kann, kann mit Xamarin auch unter C# in Visual Studio gemacht werden
  • 24.
    Architektur von Xamarin.Android .NETAPIs Android Binding Android.* Java.* Linux Kernel Mono ART MCW ACW
  • 25.
    Android Linking Bild ©Xamarin Debug Build Release Build
  • 26.
  • 27.
    Visual Studio forMac Visual Studio Plugin VS 2010 und höher Entwicklungswerkzeuge
  • 28.
  • 29.
    Visual Studio Integration Ineiner Solution: • iOS • Android • Windows Phone • Windows Store • Universal Windows PlatformApps (UWP) Gewohnte Werkzeuge: • ReSharper • Team Foundation Server • ..
  • 30.
    Visual Studio Integration Debuggingunter: • Emulatoren • Geräten Integriert in die Toolbar • Status • Logs • Liste von verfügbaren Geräten
  • 31.
    Visual Studio forMac • Entwicklungsumgebung für Mac • Weiterentwicklung von Xamarin Studio • Intellisense • Debugger • Designer • NuGet Paketmanager • Ersetzt Xamarin Studio!
  • 32.
  • 33.
  • 34.
    Android • Open Source •Basisert auf Linux Kernel • 2007 angekündigt • Ende 2008 die ersten Geräte • Smartphones, Tablets, Wearables, etc..
  • 35.
    Versionen • 15 Hauptversionen •Namen von Süßigkeiten (KitKat, Lollipop, Marshmallow, Nougtat, Oreo, ...) • Diverse Hersteller (Sony, Acer, HTC, Samsung, ...) • Jeder Hersteller ist selbst für die Bereitstellung von Updates verantwortlich
  • 36.
    Android Versionen (StandJuni 2018) https://developer.android.com/about/dashboards/index.html 0,30% 0,40% 4,30% 10,30% 4,80% 17,60% 25,50% 22,90% 8,20% 4,90% 0,80% Anteil 2.3 Ging erbread (APILe vel 10): 0,30 % 4.0 .x Ice Crea m Sandwich(API Lev el1 5): 0,40 % 4.1 - 4.3 Jelly Be an(API Lev el1 6 -1 8): 4,30 % 4.4 KitKat (APILe ve l19 ):1 0,30 % 5.0 Lollipop(API Leve l2 1):4 ,80 % 5.1 Lollipop(API Leve l2 2):1 7,6 0 % 6.0 Marshmallow (APIL eve l23 ):2 5,50 % 7.0 Noug at (APILe vel 24): 22 ,9 0 % 7.1 Noug at (APILe vel 25): 8,20 % 8.0 Ore o(APILe ve l26 ):4,9 0 % 8.1 Ore o(APILe ve l27 ):0,8 0 %
  • 37.
    API Level • Zujeder Android Version gibt es einen eindeutigen Integerbezeichner è Das API Level • Das API Level identifiziert somit die Versionen der verfügbaren Bibliotheken eindeutig • Das API Level bestimmt auch die Verfügbaren Intents und Permissions • Zu jeder App können drei API Level konfiguriert werden • Target Framework à Gegen diese Version wird die App von Xamarin kompiliert • Minimum Android Version à die niedrigste Version, die von der App unterstütz wird (diese Information wird zur Laufzeit benötigt) • Target Android Version à Zielversion der App
  • 38.
  • 39.
    Der Android SDKManager • SDK Tools (Benötigt) • SDK Manager, AVD Manager, Emulator • SDK Platform-tools (Benötigt) • Android Debugging Bridge (adb) • SDK Platform (Mindestens eine benötigt) • Alle konfigurierten Versionen müssen installiert sein (Minimum) • System Image (Empfohlen) • Images für den Android Emulator • Android Support Library (Empfohlen) • Bibliothek, die z. B. Fragments in älteren Android Versionen (bis 1.6) nachrüstet • Google Play Services (Empfohlen) • Client Bibliotheken für Maps, etc.
  • 40.
    Demo Android Hello Worldmit Visual Studio und Xamarin
  • 42.
    Projektüberblick • Assets • MitgelieferteDateien (Text, Videos, Audio, ...) • Resources • Drawable (Bilder) • Layout (Bildschirmmasken) • Values (Strings und Styles) • MainActivity.cs • Quellcode der ersten Bildschirmmaske
  • 43.
    Android Debugging aufdem Emulator • Google Emulatoren waren früher sehr langsam • Dank Intel HAXM ist dies heute gelöst • Falls Hyper-V aktiviert ist: Visual Studio 2017.8 (Preview) und Windows 10 April 2018 Update nutzen (Link zum Blog Post) • Falls VirtualBox installiert ist: Genymotion
  • 44.
    Android Debugging miteinem echten Gerät • Developer Mode aktivieren • Einstellungen à Über das Telefon à Build-Nummer mehrfach an-“tappen“ • USB Debugging aktivieren • Unter Windows: Treiber des Herstellers installieren!
  • 45.
  • 46.
    Activities • Activities repräsentiereneinen Bildschirm • Es handelt sich dabei um C# Code Dateien • Jeder Schirm hat eine Activity • Eine Activity (typischerweise die MainActivity) ist der Einsprungspunkt in die App (der MainLauncher)
  • 47.
  • 48.
    Activity Lifecycle • OnCreate •Erste Methode die Aufgerufen wird. Hier werden Views erstellt und initialisiert • OnStart • Folgt auf OnCreate und wird zum aktualisieren von Daten benutzt • OnResume • Wird immer aufgerufen wenn die Aktivität sichtbar wird. Der Nutzer kann nun mit der Activity interagieren. Macht alles „Rückgängig“ was in OnPause gemacht wurde • OnPause • Wenn die Activity in den Hintergrund geht. Hier werden Zustandsdaten gespeichert • OnStop • Wenn die aktuelle Activity nicht mehr sichtbar ist • OnRestart • OnDestroy
  • 49.
    Demo Das habe ichmir gespart
  • 50.
  • 51.
    Lokale Datenhaltung mitSQLite und EF Core • SQLite ist eine leichtgewichtige, dateibasierte Datenbank • Android nutzt intern selbst SQLite zur Datenhaltung • Die entsprechenden Treiber sind im Betriebssystem bereits enthalten • Das Entity Framework Core ermöglicht einen leichten Zugriff auf SQLite Datenbanken
  • 52.
    Lokale Datenhaltung mitSQLite und EFCore public class SavedItemContext : DbContext { private readonly string _path; public SavedItemContext(string path) { _path = Path.Combine(path, "saveditems.db"); } public DbSet<SavedItem> SavedItems { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); optionsBuilder.UseSqlite($"Filename={_path}"); } }
  • 53.
  • 54.
    ListViews und Adapter •ListViews zeigen eine Liste / Collection von Daten in einer Listenform an. • Das Layout der einzelnen Zeilen kann beliebig komplex werden • Als Datenquelle von ListViews dienen Adapter • Es gibt folgende Standardadapter: • ArrayAdapter • SimpleAdapter • BaseAdapter • CursorAdapter
  • 55.
    Beispiel: Array Adapter varpersons = new[] {“Wilhelm Brause“, “Hans Dampf“}; var listView = FindViewById<ListView>(Resource.Id.myListView); var adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, persons); listView.Adapter = adapter;
  • 56.
  • 57.
    Android Intents • Intentssind “Nachrichtenobjekte“ • Sie werden genutzt um Acitivities oder Services zu starten • Zwei Typen können unterschieden werden • Explizite Intents (Starten durch den Klassennamen, meist Activities in der eigenen App) • Implizite Intents (Starten von Aktionen in anderen Apps) • Über den IntentChooser kann eine passende Aktivität interaktiv vom Benutzer ausgesucht werden wenn mehr als eine Aktivität für einen Intent registriert sind. • Der IntentChooser verhindert auch einen Absturz falls nichts für den Intent registriert ist
  • 58.
    Beispiel: Impliziter Intent„Anruf“ via Intent Chooser var uri = Uri.Parse("tel:+49 (0) 1234/56789-0"); var intent = new Intent(Intent.ActionDial, uri); var chooser = Intent.CreateChooser(intent, "Womit soll gewählt werden?"); StartActivity(chooser); Beispiel: Android / 03_AndroidActivityIntentDemo
  • 59.
    Beispiel: Impliziter Intent„Browser Navigation“ via Intent Chooser var uri = Uri.Parse("http://www.andrekraemer.de"); var intent = new Intent(Intent.ActionView, uri); var chooser = Intent.CreateChooser(intent, “Welchen Browser möchten Sie nutzen?"); StartActivity(chooser); Beispiel: Android / 03_AndroidActivityIntentDemo
  • 60.
    Beispiel: Impliziter Intent„Karten“ via Intent Chooser var uri = Uri.Parse("geo:51.421458,7.008155"); var intent = new Intent(Intent.ActionView, uri); var chooser = Intent.CreateChooser(intent, "Welche Karten-App soll genutzt werden?"); StartActivity(chooser); Beispiel: Android / 03_AndroidActivityIntentDemo
  • 61.
    Beispiel: Expliziter Intentzur Navigation zu einer internen Activity var intent = new Intent(this, typeof (DetailsActivity)); intent.PutExtra("count", 1); intent.PutExtra("hallo", "welt"); StartActivity(intent); // In der Zielactivity ... protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); var hallo = Intent.GetStringExtra("hallo"); var count = Intent.GetIntExtra("count", -1); Beispiel: Android / 03_AndroidActivityIntentDemo
  • 62.
  • 63.
    Homepage andre@ andrekraem er.de| http://andrekraem er.de | http://andrekraem er.de/blog | http://github.com /AndreKraem er Vielen Dank! Blog Xing Facebook Twitter Google+
  • 64.
    Meine Dienstleistungen • Schulungen •ASP.NET / JavaScript / Angular • Xamarin • Unit Testing und Refactoring • TX Text Control • Team Foundation Server • .NET Datenzugriff (Entity Framework, NHibernate, Micro O/R Mapper) • Consulting • Durchführung von Technologieworkshops • Code- / Architekturreviews • Analyse von managed Memory Leaks und Performanceproblemen • Prototypenentwicklung • Remote Entwickler-Support • Projektbegleitendes Coaching • Beratung bei der Migration von Legacy Technologien (Classic ASP, Visual Basic 6, Gupta Centura, ...) zu .NET • Softwareentwicklung • Mobile Apps (Android, iOS, Windows 10) • Entwicklung von Web-Anwendungen mit ASP.NET und Angular • Entwicklung von Desktop Anwendungen • Migration von ASP Classic zu modernen Weblösungen andre@ andrekraem er.de | https://andrekraem er.de | http://andrekraem er.de/blog | http://github.com /AndreKraem er