Android

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite & 1 Group

    Android - Presentation 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.17\" ● 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(\"Chiudi\", 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=\"1.0\" encoding=\"utf-8\"?> <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:orientation=\"vertical\" android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" > <ListView android:id=\"@+id/talkList\" android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" /> </LinearLayout> Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009
    23. TalkItem <?xml version=\"1.0\" encoding=\"utf-8\"?> <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" android:background=\"@color/notepad_paper\"> <TextView android:id=\"@+id/rowTime\" android:layout_width=\"wrap_content\" android:layout_height=\"fill_parent\" android:padding=\"10dp\" android:scrollbars=\"vertical\" android:fadingEdge=\"vertical\" android:textColor=\"@color/notepad_text\" android:layout_alignParentRight=\"true\" /> <TextView android:id=\"@+id/row\" android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" android:padding=\"10dp\" android:scrollbars=\"vertical\" android:fadingEdge=\"vertical\" android:textColor=\"@color/notepad_text\" android:layout_alignParentLeft=\"@+id/rowTime\" /> </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=\"1.0\" encoding=\"utf-8\"?> <manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"it.javaday.android.roma2009\" android:versionCode=\"1\" android:versionName=\"1.0.0\"> <application android:icon=\"@drawable/icon\" android:label=\"@string/ app_name\"> <activity android:name=\".ListaTalk\" android:label=\"@string/app_name\"> <intent-filter> <action android:name=\"android.intent.action.MAIN\" /> <category android:name=\"android.intent.category.LAUNCHER\" /> </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(\"Map\"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { startActivity(new Intent(\"it.javaday.android.roma2009.MAP\")); 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=\"com.google.android.maps\" /> <activity android:name=\".JavaDayMap\" android:label=\"@string/app_name\"> <intent-filter> <action android:name=\"it.javaday.android.roma2009.MAP\" /> <category android:name=\"android.intent.category.DEFAULT\" /> </intent-filter> </activity> </application> <uses-permission android:name=\"android.permission.INTERNET\"/> 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(\"Roma, Via Vasca Navale\", 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

    + Stefano SannaStefano Sanna, 9 months ago

    custom

    2211 views, 1 favs, 1 embeds more stats

    Android è la piattaforma aperta di mobile computin more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 2211
      • 2098 on SlideShare
      • 113 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 30
    Most viewed embeds
    • 113 views on http://www.gerdavax.it

    more

    All embeds
    • 113 views on http://www.gerdavax.it

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events