SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
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.17quot;
●

    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


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
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
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(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
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=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
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
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=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
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
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=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
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
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
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
       –


                  Riccardo Solimena, Java Italian Portal - Stefano Sanna, JUG Sardegna
                                               Javaday Roma III Edizione – 24 gennaio 2009

Mais conteúdo relacionado

Destaque

Destaque (6)

1. Introduzione al corso
1. Introduzione al corso1. Introduzione al corso
1. Introduzione al corso
 
Android seminar ppt
Android seminar pptAndroid seminar ppt
Android seminar ppt
 
Android seminar-presentation
Android seminar-presentationAndroid seminar-presentation
Android seminar-presentation
 
Android ppt
Android pptAndroid ppt
Android ppt
 
Presentation on Android operating system
Presentation on Android operating systemPresentation on Android operating system
Presentation on Android operating system
 
Android ppt
Android ppt Android ppt
Android ppt
 

Semelhante a Android

Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...Riccardo Solimena
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth HackingStefano Sanna
 
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
 
Progetto WANDA
Progetto WANDAProgetto WANDA
Progetto WANDAARIANET
 
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
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione AvanzataStefano Sanna
 
Android base day1
Android base day1Android base day1
Android base day1Andrea Zaza
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - TigerMatteo Baccan
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld DevicesGWTcon
 
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Massimiliano Leone
 
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
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzajekil
 

Semelhante a Android (20)

Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
 
Sun SPOT
Sun SPOTSun SPOT
Sun SPOT
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth Hacking
 
Dessi Tech Day2008 Cagliari
Dessi Tech Day2008 CagliariDessi Tech Day2008 Cagliari
Dessi Tech Day2008 Cagliari
 
Android
AndroidAndroid
Android
 
Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)Delphi and ExtJS (26 ottobre 2017)
Delphi and ExtJS (26 ottobre 2017)
 
Java&Solidarieta
Java&SolidarietaJava&Solidarieta
Java&Solidarieta
 
Mobile senza frontiere
Mobile senza frontiereMobile senza frontiere
Mobile senza frontiere
 
Progetto WANDA
Progetto WANDAProgetto WANDA
Progetto WANDA
 
LucianoZu_CV
LucianoZu_CVLucianoZu_CV
LucianoZu_CV
 
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
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
Android base day1
Android base day1Android base day1
Android base day1
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
 
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
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 

Mais de Stefano Sanna

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Stefano Sanna
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldStefano Sanna
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017 Stefano Sanna
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in actionStefano Sanna
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconStefano Sanna
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented SmartphoneStefano Sanna
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low EnergyStefano Sanna
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidStefano Sanna
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVStefano Sanna
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniStefano Sanna
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsStefano Sanna
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniStefano Sanna
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappoleStefano Sanna
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open HardwareStefano Sanna
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0Stefano Sanna
 
Comunicazione Pervasiva
Comunicazione PervasivaComunicazione Pervasiva
Comunicazione PervasivaStefano Sanna
 
Sensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliSensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliStefano Sanna
 
Introducing the Sun SPOTs
Introducing the Sun SPOTsIntroducing the Sun SPOTs
Introducing the Sun SPOTsStefano Sanna
 

Mais de Stefano Sanna (20)

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical world
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in action
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeacon
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented Smartphone
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low Energy
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera Android
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TV
 
Introduzione ad NFC
Introduzione ad NFCIntroduzione ad NFC
Introduzione ad NFC
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioni
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile Applications
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioni
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappole
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open Hardware
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0
 
Comunicazione Pervasiva
Comunicazione PervasivaComunicazione Pervasiva
Comunicazione Pervasiva
 
Sensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliSensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi Mobili
 
Introducing the Sun SPOTs
Introducing the Sun SPOTsIntroducing the Sun SPOTs
Introducing the Sun SPOTs
 
Mobile HW Mashup
Mobile HW MashupMobile HW Mashup
Mobile HW Mashup
 

Android

  • 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