Your SlideShare is downloading. ×
follow-app BOOTCAMP 3: Android
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

follow-app BOOTCAMP 3: Android

1,186
views

Published on

Published in: Self Improvement

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,186
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. www.follow-app.it INTRODUZIONE ALLA PROGRAMMAZIONE ANDROID MARZIALE GIUSEPPE Follow-App è unattività sperimentale realizzata da ARTI e QIRIS in collaborazione con la Regione Puglia - programma Bollenti Spiriti nellambito delliniziativawww.follow-app.it Innovazione per l’Occupabilità – Azioni a supporto del Piano Straordinario per il Lavoro 2011. PO FSE, Asse VII "Capacità Istituzionale".
  • 2. ABOUT ME (GIUSEPPE MARZIALE) 1. Sono Laureato in Ingegneria informatica specializzazione in sistema informativi e reti ( Ottobre 2007) 2. Lavoro in exprivia e mi occupo da pià di due anni di sviluppo mobile 3. Prevalentamente in ambito B2B 4. Sviluppiamo su Android, Ios, blackberry , Windows Phone e in multipiattaforma 5. Email : gmarziale83@gmail.com skype: giuseppe_marzialewww.follow-app.it Introduzione alla piattaforma android 2 /91
  • 3. AGENDA 1. Introduzione alla piattaforma android 2. Struttura di un app android e tool di sviluppo 3. Laboratoriowww.follow-app.it 3 /91
  • 4. Introduzione alla piattaforma android INTRODUZIONE ALLA PROGRAMMAZIONE ANDROIDwww.follow-app.it Introduzione alla piattaforma android 4 /91
  • 5. PERCHE’SVILUPPARE MOBILEwww.follow-app.it Introduzione alla piattaforma android 5 /91
  • 6. PERCHE’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 copiewww.follow-app.it Introduzione alla piattaforma android 6 /91
  • 7. UTENTI IOS,ANDROID,BBwww.follow-app.it Introduzione alla piattaforma android 7 /91
  • 8. PERCHE’ ANDROID (OS MARKETSHARE) Sistema Operativo Vendite 2011 ( Market share 2011 Crescita annuale milioni) Android 237,7 48,8% 244% IOS 93,1 19,1% 96% Symbian 80,1 16,4% -29,1% Blackberry 51.4 10,5% 5,0% Bada 13,2 2,7% 183,1% Windows Phone 6,8 1,4% -43,3% Altri 5,4 1,1% 14,4% Fonte : Canalys.com (Feb 2011)www.follow-app.it Introduzione alla piattaforma android 8 /91
  • 9. PERCHE’ ANDROID (TREND VENDITE) Fonte Wikipediawww.follow-app.it Introduzione alla piattaforma android 9 /91
  • 10. PERCHE’ ANDROID 1. Curva di apprendimento non è ripida ( a differenza dello sviluppo IOS) 2. Android è open-source e I tool di sviluppo sono scaricabili gratuitamente 3. I costi di pubblicazione di un app sul market store di android sono esigui ( 25 dollari una tantum) 4. 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)www.follow-app.it Introduzione alla piattaforma android 10 /91
  • 11. ANDROID MANUFACTURESwww.follow-app.it Introduzione alla piattaforma android 11 /91
  • 12. FORNO MICROONDE ANDROID http://www.pocket-lint.com/news/30712/android-powered-microwave-cooking-googlewww.follow-app.it Introduzione alla piattaforma android 12 /91
  • 13. ARCHITETTURA ANDROIDwww.follow-app.it Introduzione alla piattaforma android 13 /91
  • 14. COS’E’ 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.www.follow-app.it Introduzione alla piattaforma android 14 /91
  • 15. LINUX KERNEL 1) Linux kernel e driver dell’hardware 2) Core system service per security, memory management, process management, network stackwww.follow-app.it Introduzione alla piattaforma android 15 /91
  • 16. LIBRERIE E RUNTIME 1. Librerie esposte attraverso l’application framework 2. Android runtime: Dalvik Virtual Machinewww.follow-app.it Introduzione alla piattaforma android 16 /91
  • 17. APPLICATION FRAMEWORK API di alto livello 1. Le applicazioni native Android e quelle di terze parti utilizzano le stesse API.www.follow-app.it Introduzione alla piattaforma android 17 /91
  • 18. APPLICAZIONI MOBILE Sono di due Tipi 1. Web app: girano in un web browser: scritte in HTML, JavaScript, Flash, etc. 2. Native: Compilate per essere eseguite sul dispositivowww.follow-app.it Introduzione alla piattaforma android 18 /91
  • 19. 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 .dexwww.follow-app.it Introduzione alla piattaforma android 19 /91
  • 20. Struttura di un app android e tool di sviluppo INTRODUZIONE ALLA PROGRAMMAZIONE ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 20 /91
  • 21. COMPONENTI BASE DI UN APP 1. Activities 2. View e ViewGroups 3. Service 4. Intent 5. Broadcast Receiver 6. ContentProviderwww.follow-app.it Struttura di un app android e tool di sviluppo 21 /91
  • 22. ACTIVITIES 1. Componenti base di un applicazione android. Un activity è una schermata mostrata all’utente. 2. Un app android deve avere almeno un activity ma può averne più di una che si alternano durante l’esecuzione dell’applicazionewww.follow-app.it Struttura di un app android e tool di sviluppo 22 /91
  • 23. VIEW E VIEWGROUPS 1. Le view sono I controlli utenti che costituiscono le user interface( bottoni, campi di testo, label, …) . Sono classi che estendondo android.view.View. Views 2. I viewgroups sono contenitori di view , servono per organizzare e impaginare i controlli utenti ( le view). Sono classi che estendono android.view.ViewGroups. ViewGroupwww.follow-app.it Struttura di un app android e tool di sviluppo 23 /91
  • 24. SERVICES 1. 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. 2. I servizi non hanno user interfacewww.follow-app.it Struttura di un app android e tool di sviluppo 24 /91
  • 25. INTENT 1. E’ un messaggio asincrono di sistema che si compone di un azione da eseguire e dei dati. 2. Può essere esplicito o inplicito in quest’ultimo caso il sistema individua il componente che può eseguire tale azione (Intent Receiver) e la esegue. 3. Un applicazione si abilita alla registrazione di un particolare intent dichiarando un IntentFilterwww.follow-app.it Struttura di un app android e tool di sviluppo 25 /91
  • 26. INTENT 2 Un intent può essere usato per: 1. esplicitare un compito o azione che una Activity o un Service possono eseguire solitamente con o su un particolare insieme di dati; 2. lanciare una particolare Activity o Service; 3. supportare linterazione 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.www.follow-app.it Struttura di un app android e tool di sviluppo 26 /91
  • 27. INTENT EXAMPLE:IMAGE SHARINGwww.follow-app.it Struttura di un app android e tool di sviluppo 27 /91
  • 28. BROADCAST RECEIVER 1. Un app registra un broadcast receiver che e’ configurato per ricevere e gestire determinati messaggi di sistema e intent. 2. Un app può anche definire dei propri intent custom.www.follow-app.it Struttura di un app android e tool di sviluppo 28 /91
  • 29. ANDROID SECURITY 1. Ogni app in android gira nel proprio processo associata ad un user ( di sistema) e ad un gruppo univoco 2. Ogni app è quindi isolata dalle altre e non può accedere ai dati delle altre app. 3. L’unico modo di condividere dati tra applicazioni è dichiarare esplicitamente un content provider.www.follow-app.it Struttura di un app android e tool di sviluppo 29 /91
  • 30. CONTENT PROVIDER Il sistema operativo mette a disposizione una serie di content provider nativi. http://developer.android.com//reference/android/pro vider/package-summary.html. Es. 1. Il database dei contatti 2. I contenuti multimediali (audio, video , foto)www.follow-app.it Struttura di un app android e tool di sviluppo 30 /91
  • 31. STRUTTURA DI UN PROGETTO ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 31 /91
  • 32. 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="9" /> <uses-permission android:name="android.permission.INTERNET "> </uses-permission> </manifest>www.follow-app.it Struttura di un app android e tool di sviluppo 32 /91
  • 33. ANDROID MANIFEST -PERMISSION <uses-permission android:name="android.permission.INTERNET "> Tra i principali permessi che possiamo richiedere ci sono i seguenti: 1. READ_CONTACTS: leggere (ma non scrivere) i dati dei contatti dellutente. 2. WRITE_CONTACTS: scrivere (ma non leggere) i dati dei contatti dellutente 3. RECEIVE_SMS: monitorare larrivo di messaggi SMS 4. INTERNET: accedere ed utilizzare la connessione Internet 5. ACCESS_FINE_LOCATION: utilizzare un accurato sistema di localizzazione come il GPS http://developer.android.com/reference/android/Manifest.permission.htmlwww.follow-app.it Struttura di un app android e tool di sviluppo 33 /91
  • 34. STRUTTURA DI UN PROGETTO ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 34 /91
  • 35. CARTELLA ASSETS 1. contiene risorse esterne necessarie all’applicazione (file audio, video, etc)www.follow-app.it Struttura di un app android e tool di sviluppo 35 /91
  • 36. STRUTTURA DI UN PROGETTO ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 36 /91
  • 37. CARTELLA DRAWABLE (RES) 1. Contiene I file immagine che saranno utilizzati all’interno dell’app( compresa l’icona dell’applicazione)www.follow-app.it Struttura di un app android e tool di sviluppo 37 /91
  • 38. STRUTTURA DI UN PROGETTO ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 38 /91
  • 39. CARTELLA LAYOUT (RES) 1. Contiene I file di layout delle schermate della nostra app. 2. Ogni schermata avrà il suo file di layout( ossia l’impaginazione della schermata). 3. Il layout può essere definito anche da codice, ma è preferibile utilizzare l’xml perchè disaccoppia la logica dalla definizione della user interfacewww.follow-app.it Struttura di un app android e tool di sviluppo 39 /91
  • 40. STRUTTURA DI UN PROGETTO ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 40 /91
  • 41. CARTELLA VALUES (RES) 1. Contiene file xml che definiscono risorse utilizzabili all’interno dell’applicazione 2. Es. Il file delle stringhe.www.follow-app.it Struttura di un app android e tool di sviluppo 41 /91
  • 42. CARTELLA VALUES (STRING.XML) <?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">www.follow-app.it Struttura di un app android e tool di sviluppo 42 /91
  • 43. STRUTTURA DI UN PROGETTO ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 43 /91
  • 44. CARTELLA GEN 1. Contiene un file R.java generato automaticamente da eclipse( non bisogna modificarlo). 2. In questo file a ciascuna risorsa definita nella cartella Res( immagini, stringhe, view contenute nei layout ) è associato un id univoco mediante il quale si può accedere. 3. Es. Per accedere alla stringa app_name: 4. getString(R.string.app_name));.www.follow-app.it Struttura di un app android e tool di sviluppo 44 /91
  • 45. STRUTTURA DI UN PROGETTO ANDROIDwww.follow-app.it Struttura di un app android e tool di sviluppo 45 /91
  • 46. CARTELLA SRC 1. Contiene i file sorgente della nostra applicazionewww.follow-app.it Struttura di un app android e tool di sviluppo 46 /91
  • 47. ACTIVITY LIFECYCLEwww.follow-app.it Struttura di un app android e tool di sviluppo 47 /91
  • 48. LABORATORIO 1. App multidevice 2. Hello word 3. Intent tutorial 4. Editor di note 5. Location Manager e Google Map tutorialwww.follow-app.it 48 /91
  • 49. APP MULTIDEVICE 1. I dispositivi android hanno una moltitudine di dimensioni , risoluzioni , e densità 2. La densità è il numero di pixel per pollice calcolato sulla diagonale.www.follow-app.it Laboratorio 49 /91
  • 50. CLASSIFICAZIONE DEVICE Fonte : http://developer.android.com (Feb 2012)www.follow-app.it Laboratorio 50 /91
  • 51. LA SOLUZIONE 1. Usare wrap_content, fill_parent, e l’unità di misura dp per impostare le dimenzioni nei file di layout XML 2. Non usare mai misure in pixel hard coded nelle app 3. Non usare l’ absoluteLayout ( che è deprecato) 4. Inserire repliche della stessa immagine per ogni densità 5. Testare l’app usando gli emulatori 6. Approfondimento:http://docs.huihoo.com/android/2.2/ guide/practices/screens_support.htmlwww.follow-app.it 51 /91
  • 52. LA SOLUZIONE: DPI 1. DPI = Density Indipendent Pixel ossia un unità di misura dello schermo indipendente dalla densità 2. 1 pixels = DP(density pixel) * (DPI(densità) / 160). 3. Indipendentemente dalla dimensione e della densità dello schermo il density pixel occupa sempre lo stesso spaziowww.follow-app.it Laboratorio 52 /91
  • 53. LA SOLUZIONE: SCALARE LE IMMAGINI 1. 3:4:6:8 è il rapporto tra le 4 densità. 2. Se ho un immagine di 100px e la risoluzione base è mdpi(160 dpi che corrisponde al rapporto 4) si ottiene: • ldpi: 75 × 75, cioè 3/4 della risoluzione base (100 * 3 / 4 = 75); • mdpi: 100 × 100; • hdpi: 150 × 150, cioè una volta e mezzo la risoluzione base (100 * 6 / 4 = 100 * 3 / 2 = 100 * 1,5 = 150); • xhdpi: 200 × 200, cioè il doppio della risoluzione base (100 * 8 / 4 = 100 * 2 = 200) a queste risoluzioni dovrebbe corrispondere Google TV, non gli smartophones.www.follow-app.it Laboratorio 53 /91
  • 54. EMULATORI 1. QVGA (240x320, low density, small screen) 2. HVGA (320x480, medium density, normal screen) 3. WVGA800 (480x800, high density, normal screen) 4. WVGA854 (480x854 high density, normal screen)www.follow-app.it Laboratorio 54 /91
  • 55. INTENT ESPLICITO 1. 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");www.follow-app.it Laboratorio 55 /91
  • 56. INTENT IMPLICITO 1. 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")); 2. Android individua quale componente è registrato per gestire tale azione 3. Se individua un solo componente, esegue l’azione se ce n’è più di uno un dialog chiede all’utente verso quale componente dirigire l’azionewww.follow-app.it Laboratorio 56 /91
  • 57. TRASFERIMENTO DATI 1. Intent espliciti o impliciti posso contentere extra dati Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("text/plain"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, " allegato!"); startActivity(Intent.createChooser(sharingIntent,"condividi" ));www.follow-app.it Laboratorio 57 /91
  • 58. TRASFERIMENTO DATI 2 1. 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}www.follow-app.it Laboratorio 58 /91
  • 59. 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);www.follow-app.it Laboratorio 59 /91
  • 60. 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(); }www.follow-app.it Laboratorio 60 /91
  • 61. 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(); } } }www.follow-app.it Laboratorio 61 /91
  • 62. INTENT FILTER 1. 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>www.follow-app.it Laboratorio 62 /91