SlideShare a Scribd company logo
1 of 26
Xamarin
Focus su Xamarin.Android
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.
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
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
Lifecycle delle activity
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);
}
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
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
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);
}
}
}
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>
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();
}
}
Metodi delle Activity (7)
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
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
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
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);
}
}
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);
}
}
}
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>
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");
}
Invio Email Xamarin.Essentials (5)
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" />
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());
}
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);
}
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>
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");
});
}
}
Es. Lettore barcode (6)

More Related Content

What's hot

Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aopjdksrl
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomAntonio Musarra
 
Struts - Overview, Installazione e Setup
Struts - Overview, Installazione e SetupStruts - Overview, Installazione e Setup
Struts - Overview, Installazione e SetupFederico Paparoni
 
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni androidPaolo Montalto
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 

What's hot (13)

Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
 
Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aop
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
 
Xaml su Xamarin
Xaml su XamarinXaml su Xamarin
Xaml su Xamarin
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Liferay: Esporre Web Services Custom
Liferay: Esporre Web Services CustomLiferay: Esporre Web Services Custom
Liferay: Esporre Web Services Custom
 
Struts - Overview, Installazione e Setup
Struts - Overview, Installazione e SetupStruts - Overview, Installazione e Setup
Struts - Overview, Installazione e Setup
 
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni android
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
Java Advanced
Java AdvancedJava Advanced
Java Advanced
 

Similar to Xamarin.android

Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Deep multitasking in Windows Phone Codename "Mango"
Deep multitasking in Windows Phone Codename "Mango"Deep multitasking in Windows Phone Codename "Mango"
Deep multitasking in Windows Phone Codename "Mango"Matteo Pagani
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Davide Cerbo
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan Gualandri
 
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Mattia De Bernardi
 
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriFrancesco Sciuti
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitalelostrettodigitale
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Riccardo Mancinelli
 
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Massimiliano Leone
 
Intercettare gli eventi di mouse e tastiera
Intercettare gli eventi di mouse e tastieraIntercettare gli eventi di mouse e tastiera
Intercettare gli eventi di mouse e tastieraFederico Paparoni
 
Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv Codemotion
 
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioniSviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioniCodemotion
 
Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011Fabio Collini
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue paginesparkfabrik
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Jakarta Struts
Jakarta StrutsJakarta Struts
Jakarta Strutsjgiudici
 

Similar to Xamarin.android (20)

Activity intent
Activity intentActivity intent
Activity intent
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Ivano brogonzoli why_mca
Ivano brogonzoli why_mcaIvano brogonzoli why_mca
Ivano brogonzoli why_mca
 
Deep multitasking in Windows Phone Codename "Mango"
Deep multitasking in Windows Phone Codename "Mango"Deep multitasking in Windows Phone Codename "Mango"
Deep multitasking in Windows Phone Codename "Mango"
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
TravelStory presentation
TravelStory presentationTravelStory presentation
TravelStory presentation
 
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
 
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitale
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30
 
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
 
Intercettare gli eventi di mouse e tastiera
Intercettare gli eventi di mouse e tastieraIntercettare gli eventi di mouse e tastiera
Intercettare gli eventi di mouse e tastiera
 
Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv
 
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioniSviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
 
Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagine
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Android Overview
Android OverviewAndroid Overview
Android Overview
 
Jakarta Struts
Jakarta StrutsJakarta Struts
Jakarta Struts
 

More from Beniamino Ferrari

More from Beniamino Ferrari (7)

Interfaccia di Xamarin
Interfaccia di XamarinInterfaccia di Xamarin
Interfaccia di Xamarin
 
Installazione di Xamarin
Installazione di XamarinInstallazione di Xamarin
Installazione di Xamarin
 
Introduzione a Xamarin
Introduzione a XamarinIntroduzione a Xamarin
Introduzione a Xamarin
 
Corso angular js material
Corso angular js materialCorso angular js material
Corso angular js material
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Corso angular js base
Corso angular js baseCorso angular js base
Corso angular js base
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 

Xamarin.android

  • 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. 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. 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
  • 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. 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. 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. 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. 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. 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(); } }
  • 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. 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. 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. 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. 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. 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. 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"); }
  • 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. 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. 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. 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. 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"); }); } }