INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID



Documenti analoghi
Android. Intent e intent-filter. diegozabot@yahoo.it

Android world. Sviluppare app per Android. Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...)

Basi Android. Android si definisce open. Con8ene tecnologie open source. Il codice di Android è open. Licenza Open Source Apache 2.

Tecniche di progettazione e sviluppo di applicazioni mobile

Programmazione in ambiente

La geolocalizzazione

Programmazione Android. Luca Morettoni

Sviluppo su Android. Linux Day Torino 2010

Android. Anatomia di una applicazione

Corso App modulo Android. Antonio Gallo

Scuola Professionale e Filologica Geom. F.Borgogna Vercelli

Sistemi Mobili e Wireless Android Primi passi

Laboratorio di Informatica

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

INTRODUZIONE ALLE PIATTAFORME

MagiCum S.r.l. Progetto Inno-School

Android. Android. Sviluppo di applicazioni. Dalvik 19/03/2011. A. Ferrari

MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Ciclo di vita delle aevità Android Mobile Programming Prof. R. De Prisco

Sistemi Mobili e Wireless Android Introduzione alla piattaforma

ANDROID. Domenico Talia. Università della Calabria.

14/10/2015 ALESSANDRAZULLO SVILUPPO DI APPLICAZIONI ANDROID- VERSIONE 1. Alessandra Zullo

Compilatore risorse display grafico LCD serie IEC-line

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Virtualizzazione VirtualBox su Host Windows

Progettazione e Sviluppo dell Applicazione Web Share Mobile per Dispositivi Mobili Multipiattaforma. Elaborato di Laurea di: Marco Stanzani

Corso Android New Edition Corso Online Programmatore Android New Edition

Potenza Elaborativa, Sistemi Operativi e Virtualizzazione

L ambiente di sviluppo Android Studio

WEB. Piccolo dizionarietto tecnologico

Il progetto Insieme a Scuola di Internet

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Android development. Sviluppo di Mobile Apps sul sistema operativo di Google

Il web server Apache Lezione n. 3. Introduzione

Sistemi Mobili e Wireless Android Localizzazione utente

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Corso di Informatica

Registratori di Cassa

Power-Studio è un semplice, veloce potente ed intuitivo applicativo software di monitoraggio e supervisione energetica che consente di realizzare:

Architetture Informatiche. Dal Mainframe al Personal Computer

Approccio stratificato

Corso di programmazione di sistemi mobile 1. Android. Google Cloud Messaging

1 2 Fase di autenticazione utente

Tale attività non è descritta in questa dispensa

Capitolo 4 Pianificazione e Sviluppo di Web Part

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Sommario. Oracle Database 10g (laboratorio) Grid computing. Oracle Database 10g. Concetti. Installazione Oracle Database 10g

Manuale LiveBox APPLICAZIONE ANDROID.

Architetture Informatiche. Dal Mainframe al Personal Computer

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Oggetti Lezione 3. aspetti generali e definizione di classi I

File Server Resource Manager (FSRM)

SPSS Statistics per Windows - Istruzioni di installazione per (Licenza per utenti singoli)

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Andrea Perna. Technical Solutions Manager

Corso Corso di di programmazione di di sistemi mobile 1 1. Android Laboratorio. Primo Progetto, Toast

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Hardware delle reti LAN

Architettura di un sistema operativo

Android con App Inventor

GestVetrine 1.1 versione novembre 2014

DESY è un prodotto ideato e sviluppato da

Manuale LiveBox WEB ADMIN.

Manuale LiveBox APPLICAZIONE ANDROID.

Programmazione Android

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

Android. Android03: Ciclo di vita di una Activity.

[AD.AGIO] ANDROID SDK

Corso Eclipse. Prerequisiti. 1 Introduzione

AZIENDA SIMULATA CREAZIONE DI UN APP

Collegamento remoto vending machines by do-dots

Sistemi Mobili e Wireless Android Activity

Corso Programmazione Java ed Android

Sistemi operativi. Esempi di sistemi operativi

Fabrizio Caccavello APP NO GRAZIE, LUNGA VITA A RESPONSIVE DESIGN cfabry cfabry Fabrizio Caccavello

Lezione 3 Le attività

Lezione 3 Le attività

Lo scenario: la definizione di Internet

Guida I-Help App. Android

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

Il fenomeno della geolocalizzazione. Ugo Benini

Corso Programmazione Android

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

Sistemi informativi secondo prospettive combinate

Servizio Monitoraggio Energia via Web. CEAM CWS32-H01 Professional Web Platform

Manuale LiveBox APPLICAZIONE WINDOWS PHONE V (465)

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

Manuale LiveBox WEB ADMIN.

WebGis - Piano Comprensoriale di Protezione Civile

bmooble INFOMOBILITY demo environment

MagiCum S.r.l. Progetto Inno-School

ME book è integrato nella nuvola di Libro+Web

ALTRO. v (Maggio 2015)

Setup e installazione

Gestione del file system

Social Learning Edmodo (www. edmodo.org) Caratteristiche

Transcript:

INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID Giuseppe Marziale Bari, 27 Novembre 2013

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 : gmarziale83@gmail.com skype: giuseppe_marziale

Agenda Introduzione alla piattaforma Android Struttura di un applicazione Android e tool di sviluppo Laboratorio

Introduzione alla piattaforma Android 4

Perché sviluppare Mobile Fonte: comscore.com

Perché sviluppare Mobile La diffusione degli smartphone, è enorme ed in continua crescita. Gli utenti connessi sono milioni e le app scaricate hanno superato 10 miliardi di copie Fonte: pureoxygenmobile.com

Perché Android(OS Marketshare) Fonte: IDC Worldwide Mobile Phone Tracker, Agosto 2013

Perché Android(Trend Vendite) Fonte: Wikipedia

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)

Android Manufacteres

ARCHITETTURA ANDROID Applicazioni Application Framework Librerie native + Android runtime Linux kernel 11

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.

Linux Kernel kernel Linux v2.6 Driver dei dispositivi fisici 13

Librerie e Runtime 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 14

Application Framework 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. 15

TIPOLOGIA MOBILE APP 16

Applicazioni native Android 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 17

Struttura di un app Android e ambiente di sviluppo 18

Componenti base di un app Activities Fragment View e ViewGroups Service Intent Broadcast Receiver Content Provider

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.

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.

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

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.

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.

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.

Intent example:visualizzazione url

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.

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);

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.

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)

Struttura di un progetto Android

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 "> </usespermission> </manifest>

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'utente RECEIVE_SMS: monitorare l'arrivo di messaggi SMS INTERNET: accedere ed utilizzare la connessione Internet ACCESS_FINE_LOCATION: utilizzare un accurato sistema di localizzazione come il GPS

Feature e permission categoria permission feature Location access_mock_location android.hardware.location access_location_extra_commands android.hardware.location install_location_provider access_coarse_location access_fine_location android.hardware.location android.hardware.location.network e android.hardware.location android.hardware.location e android.hardware.location.gps http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permiss

Struttura di un progetto Android

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

Struttura di un progetto Android

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

Struttura di un progetto Android

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

Struttura di un progetto Android

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.

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">

Struttura di un progetto Android

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));.

Struttura di un progetto Android

Contiene i file sorgente della nostra applicazione Cartella src

Activity lifecycle

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.

Gestione activity callback

Laboratorio App multidevice Hello word Intent tutorial Location Manager e Google Map tutorial Editor di note

App Multidevice I dispositivi android hanno una moltitudine di dimensioni, risoluzioni, e densità La densità è il numero di pixel per pollice calcolato sulla diagonale.

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)

Correlazione fra screen size/density reale e generalizzata Classi di Device

Classificazione Device

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 56

Supportare Multiple Screens Dichiarare esplicitamente nel manifest quali screen sizes la nostra app supporta <supports-screens android:xlargescreens="true" /> Provvedere layout differenti per differenti screen sizes I qualificatori utilizzati sono small, normal, large, xlarge Da 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 adeguata http://developer.android.com/guide/topics/resources/providingresources.html#bestmatch

Esempio di sottocartelle 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 Screens

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

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

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).

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");

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

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"));

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}

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);

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

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

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>