SlideShare a Scribd company logo
1 of 42
Download to read offline
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
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
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
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
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
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
Non solo Google...
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
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
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
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
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
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
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
DEMO
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
Struttura dell'applicazione
ListaTalk
(Activity)
JavaDayMap
(Activity)
Geocoder
MapController
MapView
ListView
ItemAdapter
SQLiteDatabase
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
Progetto Android
Delizioso sorgente Java!
Descrittore dell'applicazione
File di supporto
Immagini
XML di layout della UI
Stringhe, vettori...
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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);
// map code here!!!!!!
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
Slide successive
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
Usiamo il Geocoder
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());
}
Il Geocoder trasforma l'indirizzo testuale in latitudine/longitudine
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
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
Architettura di Android
Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
Javaday Roma III Edizione – 24 gennaio 2009
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
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
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
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
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
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
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
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
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

More Related Content

Similar to Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pratici.

Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth HackingStefano Sanna
 
Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...Antonio Gallo
 
Android base day1
Android base day1Android base day1
Android base day1Andrea Zaza
 
Sviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhoneSviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhoneEduard Roccatello
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppoLorenzo Braghetto
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceDiego La Monica
 
Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)Eugenio Minardi
 
GAE python GDG Milano L04
GAE python GDG Milano L04GAE python GDG Milano L04
GAE python GDG Milano L04Paolo Dadda
 
Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)Francesco Ronchi
 
Augmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaAugmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaCodemotion
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld DevicesGWTcon
 
Sviluppo di applicazioni mobile con Titanium Appcelerator
Sviluppo di applicazioni mobile con Titanium AppceleratorSviluppo di applicazioni mobile con Titanium Appcelerator
Sviluppo di applicazioni mobile con Titanium Appceleratorextrategy
 
Presentazione+Android
Presentazione+AndroidPresentazione+Android
Presentazione+AndroidNicola Pedot
 

Similar to Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pratici. (20)

Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth Hacking
 
Sun SPOT
Sun SPOTSun SPOT
Sun SPOT
 
Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novità di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
 
Android
AndroidAndroid
Android
 
Android base day1
Android base day1Android base day1
Android base day1
 
Sviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhoneSviluppare applicazioni geolocalizzate per iPhone
Sviluppare applicazioni geolocalizzate per iPhone
 
Java&Solidarieta
Java&SolidarietaJava&Solidarieta
Java&Solidarieta
 
Spring e Flex
Spring e FlexSpring e Flex
Spring e Flex
 
Dessi Tech Day2008 Cagliari
Dessi Tech Day2008 CagliariDessi Tech Day2008 Cagliari
Dessi Tech Day2008 Cagliari
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
 
Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)
 
GAE python GDG Milano L04
GAE python GDG Milano L04GAE python GDG Milano L04
GAE python GDG Milano L04
 
Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)Sviluppo Android (LinuxDay TO 2010)
Sviluppo Android (LinuxDay TO 2010)
 
Augmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaAugmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vista
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
Sviluppo di applicazioni mobile con Titanium Appcelerator
Sviluppo di applicazioni mobile con Titanium AppceleratorSviluppo di applicazioni mobile con Titanium Appcelerator
Sviluppo di applicazioni mobile con Titanium Appcelerator
 
Presentazione+Android
Presentazione+AndroidPresentazione+Android
Presentazione+Android
 

Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pratici.

  • 1. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pratici. Riccardo Solimena (Java Italian Portal) Stefano Sanna (JUG Sardegna Onlus)
  • 2. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 Outline ● Who we are ● Android: brevissima introduzione ● Code, please! DEMO! ● Architecture, library, tools ● Android vs Java ME vs iPhone ● Conclusioni
  • 3. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 4. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 5. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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”
  • 6. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 Non solo Google...
  • 7. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 8. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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!
  • 9. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 10. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 11. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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/
  • 12. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 13. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 DEMO
  • 14. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 Struttura dell'applicazione ListaTalk (Activity) JavaDayMap (Activity) Geocoder MapController MapView ListView ItemAdapter SQLiteDatabase
  • 15. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 Progetto Android Delizioso sorgente Java! Descrittore dell'applicazione File di supporto Immagini XML di layout della UI Stringhe, vettori...
  • 16. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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; }
  • 17. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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(); }
  • 18. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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(); } });
  • 19. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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();
  • 20. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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; } }
  • 21. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 22. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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>
  • 23. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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>
  • 24. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 25. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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>
  • 26. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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); }
  • 27. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 28. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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)
  • 29. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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"/>
  • 30. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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); // map code here!!!!!! } @Override protected boolean isRouteDisplayed() { return false; } } Slide successive
  • 31. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 Usiamo il Geocoder 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()); } Il Geocoder trasforma l'indirizzo testuale in latitudine/longitudine
  • 32. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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);
  • 33. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 Architettura di Android
  • 34. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 35. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 View e widget ● Android dispone di una ricca libreria di viste e widget, altamente configurabili e personalizzabili
  • 36. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 37. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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.
  • 38. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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à...
  • 39. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 40. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 41. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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
  • 42. Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna Javaday Roma III Edizione – 24 gennaio 2009 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