INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID · Introduzione alla piattaforma Android Struttura di...
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/1.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/2.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/3.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/4.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/5.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/6.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/7.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/8.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/9.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/10.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/11.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/12.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/13.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/14.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/15.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/16.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/17.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/18.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/19.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/20.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/21.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/22.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/23.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/24.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/25.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/26.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/27.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/28.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/29.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/30.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/31.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/32.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/33.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/34.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/35.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/36.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/37.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/38.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/39.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/40.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/41.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/42.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/43.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/44.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/45.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/46.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/47.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/48.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/49.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/50.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/51.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/52.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/53.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/54.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/55.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/56.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/57.jpg)
● 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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/58.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/59.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/60.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/61.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/62.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/63.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/64.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/65.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/66.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/67.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/68.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022022115/5c73bb3b09d3f2b57a8bce57/html5/thumbnails/69.jpg)
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>