Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Xamarin.android

111 views

Published on

Come usare Xamarin.Android, Xamarin Essentials, lettore barcode in xamarin

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Xamarin.android

  1. 1. Xamarin Focus su Xamarin.Android
  2. 2. Focus  Xamarin.Android espone la versione completa di Android SDK per gli sviluppatori .NET.  Permette di creare app Android completamente native con C# o F# in Visual Studio.
  3. 3. Activity Lifecycle  Activity o schermata è una concetto specifico di android  Activity possiede un metodo onCreate da dove parte il programma di ogni activity  Ogni Activity può lanciare un’altra activity  Ogni applicazione ha un’activity principale che viene impostata come punto di ingresso dell’app
  4. 4. Stati delle Activity  Active or Running: entrano in questo stato quando vengono poste un foreground. Sono considerate al top dello stack delle activity. Possono essere terminate dal sistema solo se UI diventa non responsiva o per eccesso di allocazione di memoria  Paused: un’activity entra in questo stato se il device entra nello stato di sleep mode o quando viene era in forgreound e viene sostituita da un’altra. Le activity nello stato Paused sono sempre vive e mantengono loro stato. L’activity viene parzialmente oscurata all’utente.  Stopped: un’activity paused può entrare e nello stato stopped se ha completato la sua esecuzione e non è più visibile dall’utente, il sistema tende a scegliere le activity per liberare risorse necessarie al sistema  Restarted: una qualsiasi activity stopped o paused può essere ripristinata se l’utente lo richiede viene ripristinata con lo stato che aveva memorizzato
  5. 5. Lifecycle delle activity
  6. 6. Metodi delle Activity (1)  OnCreate è il metodo che viene chiamato subito dopo la creazione dell’activity  Bundle un dizionario viene utilizzato per lo scambio dati e per salvare lo stato dell’activity e per lo scambio dati tra activity  In questa fase viene impostato il layout tramite il metodo SetContentView e nome della risorsa di layout protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); }
  7. 7. Metodi delle Activity (2)  OnStart() viene chiamato quando l’activity diventa visibile all’utente  OnResume() viene chiamato quando l’utent inizia a interagire con l’activity  OnPause() viene chiamato quando app entra nello stato paused  OnStop() viene chiamato quando l’app non è più visibile all’utente  OnRestart() viene chiamato quando un’activity riparte dopo essere stata fermata
  8. 8. Es. Start Activity (1)  Qui riporto un esempio di come poter implementare una parte dell’applicazione in maniera nativa nel caso la libreria di Xamarin forms non fosse sufficiente a rispettare le specifiche applicative  In questi casi si fa uso DependencySevice come visto in precedenza, in modo da implementare diversamente la parte che stiamo costruendo su i vari sistemi
  9. 9. Metodi delle Activity (4)  Ora vado ad implementare l’interfaccia aggiungendo nel progetto Android la classe, aggiungendola come servizio di dependecy injection using Android.Content; using AppXamarinAndroid.Droid; using Xamarin.Forms; [assembly: Dependency(typeof(NativePages))] namespace AppXamarinAndroid.Droid { public class NativePages : INativePages { public NativePages() { } public void StartAc() { var intent = new Intent(Forms.Context, typeof(ActivityTwo)); Forms.Context.StartActivity(intent); } } }
  10. 10. Metodi delle Activity (5)  Nel progetto PCL MainPage.xaml aggiungo un pulsante <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:AppXamarinAndroid" x:Class="AppXamarinAndroid.MainPage"> <StackLayout> <Button Text="Go to native" Clicked="Button_Clicked"></Button> </StackLayout> </ContentPage>
  11. 11. Metodi delle Activity (6)  Nel progetto PCL in MainPage.cs aggiunto l’implementazione dell’evento che lancia l’activity public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private void Button_Clicked(object sender, EventArgs e) { Xamarin.Forms.DependencyService.Register<INativePages>(); DependencyService.Get<INativePages>().StartAc(); } }
  12. 12. Metodi delle Activity (7)
  13. 13. Xamarin.Essentials (1)  Xamarin presenta una serie di API che permetto di accedere a feature e hardware dei sistemi in maniera unificata, le più importanti sono  Accelerometer permette di ottenere dati nello spazio tridimensionale  App Information permette di recuperare le informazioni riguardanti l’applicazione  Barometer monitorare i dati del barometro per la pressione  Battery conoscere il livello e lo stato della batteria  Clipboard per leggere o scrivere facilmente sulla clipboard  Color Converter convertitore di codici di colore nelle varie codifiche  Connectivity controllare lo stato e cambiamenti di connettività  Detect shake intercettare un movimento di shake  Device Display Information conoscere le metriche dello schermo  Device information trovare le informazioni del device  Email inviare email in maniera semplice
  14. 14. Xamarin.Essentials (2)  FlashLight permette di utilizzare il flash  Geocoding permette di geocoding e il reverse geocoding  Geolocation recuperare la posizione tramite GPS  Gyroscope rotazione del device attorno ai tre assi primari  Launcher permette di chiamare un URI nel device, utilizzando un custom uri scheme ad es. per lanciare un app disponibile su device  Magnetometer conoscere l’orientamento rispetto all’asse magnetico terrestre  Connectivity controllare lo stato e cambiamenti di connettività  Open Browser aprire il browser a una determinata URL  Orientation Sensor conoscere l’orientamento del device nello spazio 3D  Preferences memorizzare e leggere in maniera persistente le impostazioni di un’applicazione  Secure Storage memorizzare dai in maniera sicura  Share condividere testo o URI con altre app
  15. 15. Invio Email Xamarin.Essential (1)  Requisti Android  Xamarin.Essentials supporta Android 4.4 o superiori  Target Android version 8.1, API level 27.  Un’app di invio mail come Gmail o Outlook disponibile su device
  16. 16. Invio Email Xamarin.Essential (2)  Scaricare e installare se non già presente Xamarin.essentials da Nuget su tutti i progetti  Impostare in MainActivity.cs nel progetto Android protected override void OnCreate(Bundle savedInstanceState) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } }
  17. 17. Invio Email Xamarin.Essential (3)  Aggiungere nel progetto PCL la classe EmailSenderusing System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Xamarin.Essentials; namespace AppSentEmail { public class EmailSender { public async Task SendEmail(string subject, string body, List<string> recipients) { var message = new EmailMessage { Subject = subject, Body = body, To = recipients, }; await Email.ComposeAsync(message); } } }
  18. 18. Invio Email Xamarin.Essential (4)  Nel progetto PCL in MainPage.xaml <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:AppSentEmail" x:Class="AppSentEmail.MainPage"> <StackLayout> <Button Text="Send" Clicked="Button_Clicked"> </Button> </StackLayout> </ContentPage>
  19. 19. Invio Email Xamarin.Essential (4)  Nel progetto PCL in MainPage.xaml.cs public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private async void Button_Clicked(object sender, EventArgs e) { EmailSender emailSender = new EmailSender(); List<string> list = new List<string>(); list.Add("yourname@yourdomain"); try { await emailSender.SendEmail("test", "this is a test from xamarin ", list); } catch (FeatureNotSupportedException fbsEx) { // Email is not supported on this device await DisplayAlert("Alert", "Please install app supports send email feature", "OK"); } catch (Exception ex) { // Some other exception occurred await DisplayAlert("Error", ex.Message, "OK"); }
  20. 20. Invio Email Xamarin.Essentials (5)
  21. 21. Es. Lettore barcode (1)  Il lettore barcode non è presente su Xamarin.Essentials.  Questo esempio sfrutta un pacchetto Nuget  Requisiti  Pacchetto nuget Zxing.Net.Mobile e Zxing.Net.Mobile.Forms  Permessi Android  <uses-permission android:name="android.permission.CAMERA" />  <uses-permission android:name="android.permission.FLASHLIGHT" />
  22. 22. Es. Lettore barcode (2)  Nel progetto Android inserire nel metodo onCreate della MainActivity  Zxing.Net.Mobile.Forms.Android.Platform.Init(); protected override void OnCreate(Bundle savedInstanceState) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(savedInstanceState); ZXing.Net.Mobile.Forms.Android.Platform.Init(); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); }
  23. 23. Es. Lettore barcode (3)  Aggiunta della richiesta di permessi nel progetto Android protected override void OnResume() { base.OnResume(); if (ZXing.Net.Mobile.Android.PermissionsHandler.NeedsPermissionRequest(this)) ZXing.Net.Mobile.Android.PermissionsHandler.RequestPermissionsAsync(this); } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); global::ZXing.Net.Mobile.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults); }
  24. 24. Es. Lettore barcode (4)  Nel progetto PCL MainPage.xaml imposto la pagina a full screen per la scansione barcode e imposto come metodo che intercetta il risultato Handle_OnScanResult <?xml version="1.0" encoding="utf-8" ?> <zxing:ZXingScannerPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:AppBarcode" xmlns:zxing="clr-namespace:ZXing.Net.Mobile.Forms;assembly=ZXing.Net.Mobile.Forms" x:Class="AppBarcode.MainPage" Title="Full screen" OnScanResult="Handle_OnScanResult" IsScanning="true"> </zxing:ZXingScannerPage>
  25. 25. Es. Lettore barcode (5)  Nel progetto PCL MainPage.xaml.cs intecetto il codice risultante e lo mostro a schermo public partial class MainPage : ZXingScannerPage { public MainPage() { InitializeComponent(); } public void Handle_OnScanResult(Result result) { Device.BeginInvokeOnMainThread(async () => { await DisplayAlert("Scanned result", result.Text, "OK"); }); } }
  26. 26. Es. Lettore barcode (6)

×