Your SlideShare is downloading. ×

Android

5,407
views

Published on

Android è la piattaforma aperta di mobile computing sviluppata dalla Open Handset Alliance e sostenuta da Google. Basata su Linux e dotato di un ambiente Java ottimizzato e una ricca libreria di …

Android è la piattaforma aperta di mobile computing sviluppata dalla Open Handset Alliance e sostenuta da Google. Basata su Linux e dotato di un ambiente Java ottimizzato e una ricca libreria di classi, Android si candida per essere l'ambiente applicativo ideale per la telefonia cellulare. Dopo aver illustrato l'architettura del framework e l'IDE di sviluppo, vedremo la realizzazione di una applicazione Java, sfruttando le librerie di Android e testandola sull'emulatore e su un terminale HTC G1. Si vedra' come realizzare una user interface, conoscere e utilizzare le semplici ma potenti funzionalità disponibili. In chiusura si fara' un confronto critico tra Android, iPhone e Java ME.

Published in: Technology

2 Comments
6 Likes
Statistics
Notes
  • Pro download http://www.mediafire.com/?t39rxi3m3u9g12b
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Pro download http://www.mediafire.com/?t39rxi3m3u9g12b
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
5,407
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
230
Comments
2
Likes
6
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. Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pratici. Riccardo Solimena (Java Italian Portal) Stefano Sanna (JUG Sardegna Onlus) Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 2. Outline Who we are ● Android: brevissima introduzione ● Code, please! ● DEMO! Architecture, library, tools ● Android vs Java ME vs iPhone ● Conclusioni ● Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 3. Riccardo Solimena Java Experienced Consultant @ Capgemini ● Past: Java Tech Lead @ Links M&T – Technical Writer @ ● Java Italian Portal – Java Journal, Keep in tech, Programmazione.it – http://www.google-phone-android.com – Musician @ ● http://www.youtube.com/riccardosolimena – http://www.sevenotes.com – Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 4. Stefano Sanna Java ME Tech Lead @ beeweeb technologies ● Professional developer @ JME, iPhone, Android ● Technical writer @ ● Book “Java Micro Edition” (Hoepli, 2007) – DEV, Java Journal, Computer Programming – Blogger @ http://www.gerdavax.it ● Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 5. Android Android è una piattaforma open source per la ● telefonia mobile basata su Linux e Java Dal blog ufficiale: ● “Android is the first truly open and comprehensive platform for mobile devices. It includes an operating system, user-interface and applications -- all of the software to run a mobile phone, but without the proprietary obstacles that have hindered mobile innovation” Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 6. Non solo Google... Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 7. Caratteristiche principali Android è una piattaforma ricca e moderna: ● Componenti di sistema riusabili e sostituibili – Dalvik virtual machine – Browser integrato (basato sul motore WebKit) – Grafica avanzata 2D e 3D (OpenGL ES 1.0) – Database SQLite – Ricco supporto ai formati multimediali: MPEG4, – H.264, MP3, AAC, AMR, JPG, PNG, GIF GSM, EDGE, 3G; Bluetooth e WiFi – Fotocamera, GPS, bussola e accelerometro – Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 8. Principali caratteristiche Linguaggio: Java ● Libreria: Java SE (Apache Harmony, esclusa la ● parte visual) + Apache Http + Android libraries Dalvik Virtual Machine: ottimizzata per device ● mobili; totalmente indipendente dalla JVM Sun (e non compatibile con il bytecode standard di Java) Kernel Linux: sistema operativo robusto, ● efficiente, portabile OPEN SOURCE! ● Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 9. HTC G1: il primo! 528Mhz Qualcomm 7201 processor ● 64MB RAM, 128MB ROM, 1GB MicroSD card ● 3.1MP camera (no flash) 2048 x 1536 ● Quad Band, UMTS, HSDPA ● Bluetooth, 802.11b/g ● Display 3.17quot; ● HVGA (480 x 320) GPS + compass ● Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 10. HTC G1: per gli utenti WebKit browser ● Supporto SMS e MMS ● Audio: MP3, AAC, AAC+, WMA ● MPEG4, WAV, MIDI, REAL AUDIO, OGG Video: H.264, streaming, 3GPP, MPEG4, 3GP ● Email: POP, IMAP, SMTP, AOL e GMail ● IM: AIM, MSN, Yahoo!, GTalk ● Android Market + OTA application delivery ● Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 11. Cominciamo dai link! SDK e documentazione: ● http://code.google.com/android – Sorgente della piattaforma: ● http://source.android.com/ – Open Handset Alliance: ● http://www.openhandsetalliance.com – Android Market: ● http://www.android.com/market/ – Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 12. Code, please! Anziché partire dalla teoria, dall'architettura, dalla ● documentazione, dalle classi... PARTIAMO DAL CODICE Vogliamo realizzare una applicazione di supporto ● al Java Day, con la lista dei talk, i dettagli di ciascun intervento e la mappa di Roma centrata sulla sede dell'evento Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 13. DEMO Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 14. Struttura dell'applicazione SQLiteDatabase ListaTalk JavaDayMap (Activity) (Activity) Geocoder ListView MapView ItemAdapter MapController Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 15. Progetto Android Delizioso sorgente Java! File di supporto Immagini XML di layout della UI Stringhe, vettori... Descrittore dell'applicazione Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 16. Modelliamo il talk public class Talk { // getter e setter omessi per brevità... private int keyId; private String talkName; private int numRoom; private String abstractTalk; private String speech; private String time; public Talk(int keyId, String talkName, int numRoom, String abstractTalk, String speech, String time) { super(); this.keyId = keyId; this.talkName = talkName; this.numRoom = numRoom; this.abstractTalk = abstractTalk; this.speech = speech; this.time = time; } Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 17. Tutto inizia con un'Activity... public class ListaTalk extends Activity { private ArrayList<Talk> talkItems; private ListView talkList; private TalkItemAdapter adapter; private TalkDAO talkDAO; private Cursor talkCursor; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); talkList = (ListView)findViewById(R.id.talkList); talkItems = new ArrayList<Talk>(); int resID = R.layout.talk_item; adapter = new TalkItemAdapter(this, resID, talkItems); talkList.setAdapter(adapter); // inizializzazione popup (next slide) talkDAO = new TalkDAO(this); talkDAO.open(); populateTodoList(); } Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 18. Creiamo la popup final Builder builder = new AlertDialog.Builder(this); talkList.setOnItemClickListener(new OnItemClickListener() { //@Override public void onItemClick(AdapterView<?> a, View v, int pos, long arg3) { Talk talkSelected = (Talk)talkList.getItemAtPosition(pos); builder.setTitle( ... ); builder.setMessage( ... ); builder..setPositiveButton(quot;Chiudiquot;, new android.content.DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int arg1) { } }).show(); } }); Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 19. Riempire l'elemento della lista public class TalkItemAdapter extends ArrayAdapter<Talk> { int layoutID; public TalkItemAdapter(Context _context, int _resource, List<Talk> _talkItems) { super(_context, _resource, _talkItems); layoutID = _resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout todoView; Talk item = getItem(position); String talkName = item.getTalkName(); String time = item.getTime(); Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 20. Riempire l'elemento della lista if (convertView == null) { todoView = new LinearLayout(getContext()); String inflater = Context.LAYOUT_INFLATER_SERVICE; LayoutInflater vi = (LayoutInflater) getContext().getSystemService(inflater); vi.inflate(layoutID, todoView, true); } else { todoView = (LinearLayout) convertView; } TextView talkNameView = (TextView) todoView.findViewById(R.id.row); TextView talkTimeView = (TextView) todoView.findViewById(R.id.rowTime); talkNameView.setText(talkName); talkTimeView.setText(time); return todoView; } } Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 21. Dov'è l'interfaccia grafica? Android consente di definire i componenti grafici ● e il loro layout sulla UI attraverso file XML Ad ogni componente è associato un riferimento ● univoco attraverso la classe R (resources) Nel codice è possibile: ● caricare layout e componenti XML e assegnarli – alla vista corrente modificarne i parametri – create nuove viste programmaticamente – Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 22. ListaTalk <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <LinearLayout xmlns:android=quot;http://schemas.android.com/apk/res/androidquot; android:orientation=quot;verticalquot; android:layout_width=quot;fill_parentquot; android:layout_height=quot;fill_parentquot; > <ListView android:id=quot;@+id/talkListquot; android:layout_width=quot;fill_parentquot; android:layout_height=quot;fill_parentquot; /> </LinearLayout> Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 23. TalkItem <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <LinearLayout xmlns:android=quot;http://schemas.android.com/apk/res/androidquot; android:layout_width=quot;fill_parentquot; android:layout_height=quot;fill_parentquot; android:background=quot;@color/notepad_paperquot;> <TextView android:id=quot;@+id/rowTimequot; android:layout_width=quot;wrap_contentquot; android:layout_height=quot;fill_parentquot; android:padding=quot;10dpquot; android:scrollbars=quot;verticalquot; android:fadingEdge=quot;verticalquot; android:textColor=quot;@color/notepad_textquot; android:layout_alignParentRight=quot;truequot; /> <TextView android:id=quot;@+id/rowquot; android:layout_width=quot;fill_parentquot; android:layout_height=quot;fill_parentquot; android:padding=quot;10dpquot; android:scrollbars=quot;verticalquot; android:fadingEdge=quot;verticalquot; android:textColor=quot;@color/notepad_textquot; android:layout_alignParentLeft=quot;@+id/rowTimequot; /> </LinearLayout> Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 24. Piccola rivoluzione Una applicazione può: ● estendere Activity di libreria (ad esempio, la – MapActivity) invocare Activity di sistema (ad esempio, per – avviare il browser o effettuare una chiamata) esportare le proprie activity rendendole – disponibili ad altre applicazioni (ad esempio, per l'accesso ad un servizio o una procedura proprietaria) Le Activity e i messaggi (Intent) per attivarle sono ● definite nel Manifest dell'applicazione Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 25. Manifest <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <manifest xmlns:android=quot;http://schemas.android.com/apk/res/androidquot; package=quot;it.javaday.android.roma2009quot; android:versionCode=quot;1quot; android:versionName=quot;1.0.0quot;> <application android:icon=quot;@drawable/iconquot; android:label=quot;@string/ app_namequot;> <activity android:name=quot;.ListaTalkquot; android:label=quot;@string/app_namequot;> <intent-filter> <action android:name=quot;android.intent.action.MAINquot; /> <category android:name=quot;android.intent.category.LAUNCHERquot; /> </intent-filter> </activity> .... </manifest> Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 26. Richiamare le mappe @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(quot;Mapquot;); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { startActivity(new Intent(quot;it.javaday.android.roma2009.MAPquot;)); return super.onOptionsItemSelected(item); } Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 27. Location-based Service Android è equipaggiato con una ricca libreria per ● la realizzazione di applicazioni georeferenziate integrate con i servizi di Google: LocationManager: per determinare la posizione – corrente con GPS o sistemi alternativi Geocoder: per la trasformazione di indirizzi in – coordinate geografiche e viceversa MapView: per la visualizzazione di mappe, – complete di controlli di zoom, scrolling e sovrapposizione di layer personalizzati e interattivi Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 28. Visualizzare una mappa Per visualizzare una mappa (centrata su un ● indirizzo noto) all'interno di una applicazione occorre: includere la libreria com.google.android.maps e – richiedere la user-permission INTERNET scrivere una nuova Activity che estenda MapView – ottenere le Android Maps API Key associate ai – propri certificati di sviluppo e di pubblicazione (maggiori dettagli sul sito http://code.google.com/android) Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 29. Mappe nell'applicazione Nel Manifest occorre specificare l'uso della ● libreria e ottenere i permessi per la localizzazione (se si usa il GPS) e la connettività: <application ...> <uses-library android:name=quot;com.google.android.mapsquot; /> <activity android:name=quot;.JavaDayMapquot; android:label=quot;@string/app_namequot;> <intent-filter> <action android:name=quot;it.javaday.android.roma2009.MAPquot; /> <category android:name=quot;android.intent.category.DEFAULTquot; /> </intent-filter> </activity> </application> <uses-permission android:name=quot;android.permission.INTERNETquot;/> Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 30. Estendiamo MapActivity public class JavaDayMap extends MapActivity { private MapView mapView; private MapController mapController; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Slide successive // map code here!!!!!! } @Override protected boolean isRouteDisplayed() { return false; } } Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 31. Usiamo il Geocoder Il Geocoder trasforma l'indirizzo testuale in latitudine/longitudine try { Geocoder coder = new Geocoder(getApplicationContext()); List<Address> result = coder.getFromLocationName(quot;Roma, Via Vasca Navalequot;, 1); Double lat = result.get(0).getLatitude() * 1E6; Double lon = result.get(0).getLongitude() * 1E6; GeoPoint geopoint = new GeoPoint(lat.intValue(), lon.intValue()); } Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 32. Mostriamo la mappa mapView = (MapView) findViewById(R.id.mapview); MapView.LayoutParams lp = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, 160, 430, MapView.LayoutParams.BOTTOM_CENTER); View zoomControls = mapView.getZoomControls(); mapView.addView(zoomControls, lp); mapView.displayZoomControls(true); mapController = mapView.getController(); mapController.setCenter(geopoint); mapController.setZoom(17); Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 33. Architettura di Android Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 34. Quattro entità fondamentali Activity: moduli applicativi visuali e componibili ● con cui interagisce l'utente (una mappa, una lista di messaggi...) Service: logiche applicative prive di UI, invocabili ● da Activity ed eseguibili in background Broadcast Intent Receiver: consente ● l'interazione dell'applicazione con gli eventi del telefono, ricevendo e inviando notifiche Content Provider: consentono salvataggio, ● ricerca e condivisione dati tra applicazioni Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 35. View e widget Android dispone di una ricca libreria di viste e ● widget, altamente configurabili e personalizzabili Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 36. Ambiente di sviluppo SDK dedicato che comprende compilatore per il ● formato .dex (Dalvik Executable) ed emulatore Plug-in per Eclipse che consente la gestione di ● progetti Android all'interno dell'ambiente di sviluppo Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 37. Android Market Sulla scia dell'App Store dell'iPhone, Android ● dispone di un sistema integrato di distribuzione delle applicazioni: l'Android Market Attualmente dispone di poco meno di 1000 ● applicazioni (contro le 15000 dell'App Store) ed è limitato a software gratuito Attivo in USA e UK, in primavera arriverà in altre ● nazioni (Italia inclusa!) e consentirà la vendita di applicazioni. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 38. Android vs Java ME Java ME è la tecnologia di mobile computing più ● diffusa in assoluto, ma soffre di alcuni problemi: il disegno originale è del 2001: la – retrocompatibilità comincia a pesare la frammentarietà delle implementazioni rende – difficoltoso il porting e precaria la compatibilità Android è stato progettato per dispositivi ● moderni: un confronto con Java ME è quasi fuori luogo. D'altro canto, però, Android gira su un solo telefono: probabilmente tra 1-2 anni la situazione cambierà... Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 39. Android vs iPhone OS Android e iPhone OS hanno caratteristiche simili, ● anche se: Android sembra pensato per i programmatori: – l'architettura modulare di Android consente mash-up tra applicazioni; è possibile interazione a basso livello e esecuzione in background; iPhone OS è evidentemente pensato per gli – utenti: il look & feel di CocoaTouch, l'interfaccia multitouch e le guideline di iPhone OS sono estremamente innovativi e hanno segnato un punto di svolta per il mondo della telefonia mobile Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 40. G1 o iPhone? Questo è ciò che si chiedono tutti: Google o ● Apple? iPhone o anti-iPhone? Il presente è certamente iPhone: oltre 10M di ● terminali, 15K applicazioni, 500M download Android sarà protagonista (?) del 2009, con la ● commercializzazione di nuovi dispositivi e l'allargamento a nuovi mercati Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 41. Conclusioni Android è una piattaforma di sviluppo potente, ● flessibile e innovativa: il futuro della telefonia mobile passerà certamente per questa strada L'architettura modulare e l'integrazione con i ● servizi di Google consente lo sviluppo di applicazioni Mobile Internet avanzate L'Android Market potrà essere una buona ● opportunità per gli sviluppatori indipendenti Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
  • 42. GRAZIE! Riccardo Solimena ● web: http://www.riccardosolimena.com – Skype: riccardo.solimena – email: riccardo.solimena@gmail.com – Stefano Sanna ● web: http://www.gerdavax.it – Skype: gerdavax – email: gerdavax@gmail.com – Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009