INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di...

69
INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID Bari, 27 Novembre 2013 Giuseppe Marziale

Transcript of INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di...

Page 1: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID

Bari, 27 Novembre 2013

Giuseppe Marziale

Page 2: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

About Me (Giuseppe Marziale)

Sono Laureato in Ingegneria informatica specializzazione in sistema informativi e

reti ( Ottobre 2007)

Lavoro in exprivia con il ruolo di technical leader in ambito di sviluppo di

applicazioni mobile

Prevalentamente in ambito B2B

Sviluppiamo su Android, Ios, blackberry , Windows Phone e in multipiattaforma

Email : [email protected] skype: giuseppe_marziale

Page 3: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Agenda

Introduzione alla piattaforma Android

Struttura di un’applicazione Android e tool di sviluppo

Laboratorio

Page 4: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

4

Introduzione alla piattaforma Android

Page 5: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Perché sviluppare Mobile

Fonte: comscore.com

Page 6: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Perché sviluppare Mobile

Fonte: pureoxygenmobile.com

La diffusione degli smartphone, è enorme ed in continua crescita. Gli utenti connessi sono milioni e le app scaricate hanno superato 10 miliardi di copie

Page 7: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Perché Android(OS Marketshare)

Fonte: IDC Worldwide Mobile Phone Tracker, Agosto 2013

Page 8: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Perché Android(Trend Vendite)

Fonte: Wikipedia

Page 9: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Perché Android

Curva di apprendimento non è ripida ( a differenza dello sviluppo IOS)

Android è open-source e i tool di sviluppo sono scaricabili gratuitamente

I costi di pubblicazione di un app sul market store di android sono esigui ( 25 dollari

una tantum)

Installare un app android sul cellulare è un processo banale, le app android

possono essere diffuse facilmente attraverso un sito web(Time to market molto

basso)

Page 10: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Android Manufacteres

Page 11: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

11

ARCHITETTURA ANDROID

Linux kernel

Librerie native + Android runtime

Application Framework

Applicazioni

Page 12: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cos’è Android

E’ uno stack software per dispositivi mobili

1.Sistema Operativo: open source appoggia al kernel Linux (>=2.6.27) driver per l’hardware

2.Middleware: librerie, android runtime, application framework

3.Applicazioni: native o di terze parti.

Page 13: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

13

kernel Linux v2.6 Driver dei dispositivi fisici

Linux Kernel

Page 14: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

14

Le librerie native sono esposte attraverso l’application framework; sono scritte in linguaggio nativo (C/C++)

Android runtime è l’ambiente di esecuzione delle applicazioni, scritte in Java, basato su Dalvik VM

Librerie e Runtime

Page 15: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

15

L’application framework fornisce le API di alto livello che forniscono servizi evoluti

Le applicazioni native Android e quelle di terze parti utilizzano le API suddette.

Application Framework

Page 16: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

16

TIPOLOGIA MOBILE APP

Page 17: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

17

1. Scritte in Java utilizzando la sdk ufficiale distribuita da google Non supporta tutte le librerie Java come ad esempio Swing & AWT

2. Il codice java è compilato in byte code Dalvik (.dex) Ottimizzati per i dispositivi mobili (migliore gestione della memoria e

delle risorse, utilizzo della batteria , etc.)

3. La Dalvik virtual machine esegue i files .dex

Applicazioni native Android

Page 18: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

18

Struttura di un’app Android e ambiente di sviluppo

Page 19: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Componenti base di un’app

Activities

Fragment

View e ViewGroups

Service

Intent

Broadcast Receiver

Content Provider

Page 20: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Activities

Componenti base di un applicazione android. Un activity è una singola schermata

mostrata all’utente.

Un’ app android deve avere almeno un activity ma può averne più di una che si

alternano durante l’esecuzione dell’applicazione.

Ciascuna Activity è indipendente dall’altra . Un’applicazione esterna potrebbe

lanciare un’ Activity di un’altra app.

Page 21: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Fragment

E’ una sezione modulare di un activity

Ha un suo ciclo di vita

Può essere aggiunto o rimosso a runtime.

Componente riusabile in diverse Activity.

Sono disponibili dalle api 11 in poi.

Page 22: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

View e ViewGroups

Sono I componenti di interazione con gli utenti che costituiscono le user

interface( bottoni, campi di testo, label, …) . Sono classi che estendono

android.view.View. Views.

I viewgroups sono contenitori di view (invisibili), servono per organizzare e

impaginare le view. Sono classi che estendono

android.view.ViewGroups. ViewGroup

Page 23: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Services

Eseguono operazioni in background che non richiedono l’interazione diretta

dell’utente: es. Musica in sottofondo, scaricamento di un file, tracking della posizione

dell’utente.

Un’ servizi non hanno user interface.

Un’ Activity può fare lo start di un servizio ( e lo stop) e operare interazioni con lo

stesso.

Page 24: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Intent

E’ un messaggio asincrono di sistema che si compone di un azione da eseguire e

dei dati.

Può essere esplicito o inplicito: in quest’ultimo caso il sistema individua il

componente che può eseguire tale azione (Intent Receiver) e la esegue.

Un’ applicazione si abilita alla registrazione di un particolare intent dichiarando un

IntentFilter .

Page 25: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Intent

Un intent può essere usato per:

esplicitare un compito o azione che una Activity o un Service possono eseguire

solitamente con o su un particolare insieme di dati;

lanciare una particolare Activity o Service;

Supportare l'interazione tra qualsiasi applicazione installata sul dispositivo Android,

senza doversi preoccupare di che tipo di applicazione sia o di quale componente

software gli Intent facciano parte.

Page 26: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Intent example:visualizzazione url

Page 27: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Broadcast Receiver

Un’ app registra un broadcast receiver che e’ configurato per ricevere e gestire

determinati messaggi di sistema e intent;

Un’ app può anche definire dei propri intent custom, lanciarli e gestirli. Un’app non

può lanciare messaggi di sistema.

Un Broadcast Receiver non ha una user interface.

Page 28: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Android Security

Ogni app in android gira nel proprio processo associata ad un user ( di sistema) e ad un gruppo univoco

Ogni app è quindi isolata dalle altre e non può accedere ai dati delle altre app.

L’unico modo di condividere dati tra applicazioni è dichiarare esplicitamente un content provider.

Un’app ad install time ha bisogno di richiedere le autorizzazione per poter accedere a dati come i contatti, gli sms, la galleria di foto, gli storage ( sd o memoria interna);

Page 29: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Content Provider

Un content provider gestisce un set di dati condivisi

Tramite un content provider un’altra app potrebbe leggere e eventualmente modificare i dati esposti.

Un app può definire un Content Provider privato, non condiviso con altre app.

Page 30: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Content Provider

Il sistema operativo mette a disposizione una serie di content provider nativi.

http://developer.android.com//reference/android/provider/package-summary.html.

Il database dei contatti

I contenuti multimediali (audio, video , foto)

Page 31: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Struttura di un progetto Android

Page 32: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Android Manifest

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="it.gmarz83.android.temperatura" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".Convert" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion=“8” android:targetSdkVersion=“17” /><uses-feature android:name="android.hardware.camera” android:required=”false"> </uses-permission> <uses-permission android:name="android.permission.INTERNET "> </uses-permission> </manifest>

Page 33: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Android Manifest Permission

<uses-permission android:name="android.permission.INTERNET "> Tra i principali permessi che possiamo richiedere ci sono i seguenti:READ_CONTACTS: leggere (ma non scrivere) i dati dei contatti dell'utente.WRITE_CONTACTS: scrivere (ma non leggere) i dati dei contatti dell'utenteRECEIVE_SMS: monitorare l'arrivo di messaggi SMSINTERNET: accedere ed utilizzare la connessione InternetACCESS_FINE_LOCATION: utilizzare un accurato sistema di localizzazione come il GPS

Page 34: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Feature e permission

categoria permission feature

Location access_mock_location android.hardware.location

access_location_extra_commands android.hardware.location

install_location_provider android.hardware.location

access_coarse_location android.hardware.location.network e android.hardware.location

access_fine_location android.hardware.location e android.hardware.location.gps

http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions-features

Page 35: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Struttura di un progetto Android

Page 36: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cartella assets

contiene risorse esterne necessarie all’applicazione (file audio, video, etc)

Page 37: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Struttura di un progetto Android

Page 38: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cartella drawable

Contiene I file immagine che saranno utilizzati all’interno dell’app( compresa l’icona dell’applicazione)

Page 39: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Struttura di un progetto Android

Page 40: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cartella layout

Contiene I file di layout delle schermate della nostra app. Il layout può essere definito anche da codice, ma è preferibile utilizzare l’xml

perchè disaccoppia la logica dalla definizione della user interface

Page 41: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Struttura di un progetto Android

Page 42: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cartella Values(RES)

Contiene file xml che definiscono risorse utilizzabili all’interno dell’applicazione Es. Il file delle stringhe o il file contenente lo stile dell'app.

Page 43: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cartella Values(RES)

<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">Nome App</string></resources>

<application android:icon="@drawable/icon" android:label="@string/app_name">

Page 44: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Struttura di un progetto Android

Page 45: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cartella GEN

Contiene un file R.java generato automaticamente da eclipse( non bisogna modificarlo).

In questo file a ciascuna risorsa definita nella cartella Res( immagini, stringhe, view contenute nei layout ) è associato un id univoco mediante il quale è possizione referenziare il suddetto oggetto.

Es. Per accedere alla stringa app_name: getString(R.string.app_name));.

Page 46: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Struttura di un progetto Android

Page 47: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Cartella src

Contiene i file sorgente della nostra applicazione

Page 48: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Activity lifecycle

Page 49: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Activity State

L’activity può restare per un periodo esteso di tempo solo nei seguenti stati:

Resumed (running state): l’activity è in foreground e l’utente può interagire con la schermata;Paused: l’activity è parzialmente oscurata da un altra schermata ( schermata semitrasparente o semplicemente un pop-up (alert dialog) ) . L’activity in questo caso non riceve input dall’utente e non esegue codice;Stopped: l’activity è completamente nascosta e invisibile all’utente, ossia in background; Non esegue codice ma il contenuto delle sue variabili di istanza è mantenuto.

Page 50: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Gestione activity callback

Page 51: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Laboratorio

App multidevice

Hello word

Intent tutorial

Location Manager e Google Map tutorial

Editor di note

Page 52: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

App Multidevice

I dispositivi android hanno una moltitudine di dimensioni , risoluzioni , e densità

La densità è il numero di pixel per pollice calcolato sulla diagonale.

Page 53: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Classi di Device

Per semplificare la realizzazione della User Interface Android raggruppa gli attuali device in classi in base a screen size e screen density (dpi).

Screen sizes•Small (426dp x 320dp)•Normal (470dp x 320dp) – baseline size•Large (640dp x 480dp)•xLarge (960dp x 720dp)

Screen densities•low o ldpi (~120 dpi)•medium o mdpi (~160 dpi) – baseline density•high o hdpi (~ 240 dpi)•extra high o xhdpi (~ 320 dpi)•extra extra high o xxhdpi (~ 480 dpi)

Page 54: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Classi di Device

Correlazione fra screen size/density reale e generalizzata

Page 55: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Classificazione Device

Page 56: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

56

Classi di Device

Note: A partire da Android 3.2 (API level 13), questi gruppi sono deprecati al posto di una nuova tecnica basata sulla screen width disponibile (espressa in dp).E’ un concetto molto simile alle CSS3 Query

Nuovi qualificatori di dimensione

I nuovi qualificatori offono più controllo sullo specifico screen sizes che l’app supporta rispetto ai tradizionali 4 gruppi (small, normal, large, xlarge).

Typical screen widths:•320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi..)•360dp: a 5” phablet (es. note) .•600dp: a 7” tablet (600x1024 mdpi).•720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).

http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts

Page 57: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

● Dichiarare esplicitamente nel manifest quali screen sizes la nostra app supporta<supports-screens android:xlargeScreens="true" />

Supportare Multiple Screens

● Provvedere layout differenti per differenti screen sizesI qualificatori utilizzati sono small, normal, large, xlargeDa Android 3.2 sw<N>dp definisce min-width richiesto per layout resource

● Provvedere immagini differenti per diverse densitàI qualificatori utilizzati sono ldpi, mdpi, hdpi, xhdpi

In base a size e density dello schermo corrente il sistema utilizza la risorsa adeguatahttp://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch

Page 58: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

res/layout/my_layout.xml // layout for normal screen size ("default") res/layout-small/my_layout.xml // layout for small screen size res/layout-large/my_layout.xml // layout for large screen size res/layout-xlarge/my_layout.xml // layout for extra large screen size res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png // bitmap for medium density res/drawable-hdpi/my_icon.png // bitmap for high density res/drawable-xhdpi/my_icon.png // bitmap for extra high density

Supportare Multiple ScreensEsempio di sottocartelle

Page 59: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

La Soluzione

Usare wrap_content, fill_parent or dp units nella definizione di android:layout_width

and android:layout_height in un file di layout XML per garantire che la view abbia una

grandezza appropriata per la corrente dimensione dello schermo del device.

Non usare mai misure in pixel hard coded nelle app.

Non usare l’ absoluteLayout ( che è deprecato da Android 1,5) ma usare

RelativeLayout

Inserire repliche della stessa immagine per ogni densità

Testare l’app usando gli emulatori

Approfondimento:

http://docs.huihoo.com/android/2.2/guide/practices/screens_support.html

Page 60: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

La Soluzione: Dpi

DPI = Density Indipendent Pixel ossia un unità di misura dello schermo

indipendente dalla densità

1 pixels = DP(density pixel) * (DPI(densità) / 160). 1 dp è equivalente ad un

pixel fisico solo su schermi a 160 dpi (densità media)

Indipendentemente dalla dimensione e della densità dello schermo il density pixel

occupa sempre lo stesso spazio

Page 61: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

La Soluzione: Scalare le immagini

3:4:6:8:12 è il rapporto tra le 4 densità.

Se ho un immagine di 100px e la risoluzione base è mdpi(160 dpi che corrisponde

al rapporto 4) si ottiene:1.ldpi: 75 × 75, cioè 3/4 della risoluzione base (100 * 3 / 4 = 75);2.mdpi: 100 × 100;3.hdpi: 150 × 150, cioè una volta e mezzo la risoluzione base (100 * 6 / 4 = 100 * 3 / 2 = 100 * 1,5 = 150);4.xhdpi: 200 × 200, cioè il doppio della risoluzione base (100 * 8 / 4 = 100 * 2 = 200).5.xxhdpi: 300 × 300, cioè il triplo della risoluzione base (100 * 12 / 4 = 100 * 3 = 300).

Page 62: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Intent esplicito

Si tratta di un utilizzo dell’oggetto Intent nel quale si esplicita l’oggetto che si vuole

richiamare : Intent i = new Intent(this, ActivityTwo.class); i.putExtra("Value1", "This value one for ActivityTwo "); i.putExtra("Value2", "This value two ActivityTwo");

Page 63: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Intent implicito

Si tratta di un utilizzo dell’oggetto Intent nel quale si esplicita l’oggetto che si vuole

richiamare :

L’intent implicito non specifica una classe Java bensì un azione e

opzionalmente un uri associata all’azione:

Intent intent = new Intent(Intent.ACTION_VIEW,

Uri.parse("http://gmarz83.altervista.org"));

Android individua quale componente è registrato per gestire tale azione

Se individua un solo componente, esegue l’azione se ce n’è più di uno un

dialog chiede all’utente verso quale componente dirigire l’azione

Page 64: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Trasferimento Dati

Intent espliciti o impliciti posso contentere dati extra

Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("text/plain"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, " allegato!"); startActivity(Intent.createChooser(sharingIntent,"condividi"));

Page 65: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Trasferimento Dati 2

Il componente che riceve l’intent estrae i dati così

Bundle extras = getIntent().getExtras(); if (extras == null) { return; } String value1 = extras.getString(Intent.EXTRA_TEXT); if (value1 != null) { // fai qualcosa} 

Page 66: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Chiamare Activity con Risultato

Intent i = new Intent(this, ActivityTwo.class); i.putExtra("Val1", “valore 1"); i.putExtra("Val2", “valore 2");  startActivityForResult(i, REQUEST_CODE);

Page 67: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Chiamare Activity con Risultato 2

@Override public void finish() { Intent data = new Intent(); data.putExtra("returnKey1", "risultato1"); data.putExtra("returnKey2", "risultato2"); setResult(RESULT_OK, data); super.finish(); }

Page 68: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Chiamare Activity con Risultato 3

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { if (data.hasExtra("returnKey1")) { Toast.makeText(this, data.getExtras().getString("returnKey1"), Toast.LENGTH_SHORT).show(); } } }

Page 69: INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di un’applicazione Android e tool di sviluppo Laboratorio. 4 Introduzione alla piattaforma

Intent Filter

Un componente si registra e si abilita alla ricezione di determinati intent attraverso

la definizione di un intent filter , che avviene nel manifest.xml

<activity android:name=".BrowserActivitiy" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http"/> </intent-filter> </activity>