際際滷

際際滷Share a Scribd company logo
Android


Corso teorico pratico



                        Corso Android
WHOAMI

Andrea Putzu
[Software Engineer]




                               Corso Android
Introduzione


    Strumenti:


  Java Development Kit 1.5.0 (o superiore)
  (http://www.oracle.com/technetwork/java/javase/
   downloads/index.html)

  Eclipse (http://www.eclipse.org/downloads/)

  Android SDK
  (http://developer.android.com/sdk/index.html)

  Android Developer Tools Eclipse plugin
  (https://dl-ssl.google.com/android/eclipse/)



                                               Corso Android
Introduzione


  Cos'竪 Android
  Sistema operativo+middleware+applicazioni

  insieme di strumenti e librerie per la realizzazione di
    applicazioni mobili

  Open (?)

  Utilizza librerie e tecnologie open (Kernel Linux 2.6,
    librerie Http Apache,...)

  Open Handset Alliance (OHA)

  Opensource Apache Licence 2.0




                                                    Corso Android
Introduzione




               Corso Android
Introduzione


  2007 nasce l'Open Handset Alliance

  2008 HTC G1 (limitazione tastiera fsica)

  10/2008 Android 1.0

  02/2009 Android 1.1

  05/2009 Cupcake (Android 1.5, tastiera virtuale, widget...)

  09/2009 Donut (Android 1.6 Quick search box, PICO
   sintetizzatore vocale...)

  10/2009 Eclair (Android 2.0)

  01/2010 Eclair (Android 2.1)

  05/2010 Froyo (Android 2.2 JIT)

  10/2010 Gingerbread (miglioramento prestazoni, SIP)

  01/2011 Honeycomb (Android 3.0 Tablet)

  10/2011 Ice Cream Sandwich (Tablet + Smartphone)
                                                   Corso Android
Introduzione

  Linguaggi di programmazione

  Java (SDK Java 5)

  Native Development KIT C/C++


  Non ha la JVM ma la DVM (Dalvik VM)

  DVM ottimizzata per l'esecuzione di applicazioni su
     dispositivi con risorse limitate (fle .dex)

  Il fle .dex 竪 ottimizzato anche nella sua dimensione

  Utilizza un meccanismo di generazione di codice detto
     register based (java 竪 stack based), il quale comporta un
     numero inferiore del 30% di istruzioni


                                                    Corso Android
Introduzione


    JIT: si ha un'identifcazione e traduzione di parti di codice
      da Java a C/C++ con miglioramento delle prestazioni di
      esecuzione.


  Ogni applicazione ha un User ID diferente

  Ogni applicazione 竪 eseguita nel suo processo (simile a
   Chrome)

  Ogni applicazione ha una propria istanza di VM




                                                       Corso Android
Introduzione




               Corso Android
Introduzione

  Frammentazione

  Le API di un particolare API Level sono disponibili in tutti I
    dispositivi che supportano tale versione

  Un device che accede al Market vedr solo le applicazioni
    compatibili


    Compatibilit Software e Hardware




                                                     Corso Android
Introduzione

    Schermi


  Screen size: Dimensione del display in pollici (Small,
    Normal, Large, Exra large)

  Aspect ratio: Rapporto tra larghezza e altezza

  Resolution: numero di pixel del display in orizzontale e
    verticale

  Density: numero di pixel per unit di lunghezza fsica
  (Low, Medium, High, Extra High)

  Density Indipendent: dimensione non dipendente dalla
  pixel (dip o dp)      densit


                                                   Corso Android
Introduzione

QVGA




HVGA




WVGA


                      Corso Android
Anatomia di un'applicazione


  Nuovo progetto su Eclipse

  AndroidManifest.xml

  Debug

  Log:
  -Verbose Log.v(string tag, string msg)
  -Debug Log.d(string tag, string msg)
  -Info Log.i(string tag, string msg)
  -Warning Log.w(string tag, string msg)
  -Error Log.e(string tag, string msg)
  -Assert Log.println(int priority, string tag, string
     msg)

    Disabilitare I Log per applicazione in release
     it.android.andlib.utility.LogUtil
                                                     Corso Android
Anatomia di un'applicazione


  Android Debug Bridge (adb)

  adb shell

  adb install

  adb uninstall

  




                                          Corso Android
Componenti e risorse


  Activity

  Intent e Intent Filter

  Broadcast Intent Provider

  Content Provider

  Services




                                       Corso Android
Componenti e risorse

Activity                               Intent [Filter]

  UI applicazione              
                                Chiamano le Activity

  Package android.app          
                                Package android.content

  Lifecycle (onCreate(), )    
                                Permettono di interagire

  Eseguite all'interno di un     con servizi del sistema
processo Linux
                               String uri=content://contacts/123
                               Intent intent = new Intent( Intent.
                                  ACTION_GET_CONTENT,uri);

                               Intent Filter: dichiarazione
                                 intent gestiti

                                                      Corso Android
Componenti e risorse

Broadcast Intent                              Service
Receiver
                                
                                    Package android.app

  Gestione di eventi esterni    Gps, rss...
                                



  Package android.content

  Registrazione su handler di
eventi specifci




                                                    Corso Android
Componenti e risorse

Content Provider

  Gestione dati (fle, SQLite)

  Package android.content

  Di default una applicazione
non pu嘆 accedere ad db si
un'altra




                                        Corso Android
Componenti e risorse

Risorse                  
                          Res
                          compilate e accessibili

  Assets                 tramite la classe R

  Res
    
      Drawable-hdpi      
                          Assets
    
      Drawable-ldpi       non compilate e gestite
    
      Drawable-mdpi      attraverso la classe

  Layout                 AssetManager (android.res)

  Values

  AndroidManifest.xml



                                            Corso Android
Componenti e risorse

Tipo               Cartella          Costanti

String             /res/values       R.string.<chiave>
String array       /res/values       R.array.<chiave>
Integer array      /res/values       R.array.<chiave>
Color              /res/values       R.color.<chiave>
Color Drowable     /res/values       R.drawable.<chiave>
                   o /res/drawable
Stili e temi       /res/values       R.style.<chiave>
Dimensioni         /res/values       R.dimen.<chiave>



                                                Corso Android
Componenti e risorse

Tipo             Cartella        Costanti

Animator         animator        R.animator
Anim             anim            R.anim
Color list       /res/color
Menu             menu            R.menu
Assets           assets          Nessuna
Drawable         /res/drawable   R.drawable.<flename>
Xml generici     /res/xml        R.xml.<flename>
Raw              /res/raw        R.raw.<flename>



                                              Corso Android
Componenti e risorse

    Layout                      Risorse

  Defniscono l'aspetto UI   
                             String

  Editor dedicato           
                             String array

  ID                        
                             Integer Array
  @[package:][+]type/name
                            public Resources getResources()
                            


                            -getString( R.string.name)
                            -getStringArray( R.array.name)
                            -getIntAray( R.array.name)



                                              Corso Android
Componenti e risorse

Format e Plurali
                                    
                                        Color

    Like printf
                                    
                                     ColorStateList
    %[posizione]$[tipodato]
                                    
                                     Dimension
    [posizione]={1:n_runtime}        [px, in,mm,pt,dp,sp]
                                    
                                     Stili
    [tipodato]={int:d,
             string:s,foat:f,...}




                                                        Corso Android
Componenti e risorse

Drawable

  BitmapDrawable         
                           NinePatchDrawable

  ClipDrawable           
                           PictureDrawable

  ColorDrawable          
                           RotateDrawable

  GradientDrawable       
                          ScaleDrawable

  InsetDrawable          
                           ShapeDrawable

  LayerDrawable




                                         Corso Android
Componenti e risorse

NinePatchDrawable




                                    Corso Android
Componenti e risorse

Assets

  Non compaiono nella classe R

  Necessita l'utilizzo della classe AssetManager

  Cartella /assets




                                                   Corso Android
Activity e Intent




                    Corso Android
Activity

Activity

 Le applicazioni android devono sfruttare al meglio le
risorse disponibili e dare una buona percezione d'uso
all'utente.


 Devono rispondere immediatamente alle azioni di un
utente.




                                                 Corso Android
Activity

Stati

    Active: Activity in cima allo stack, visibile e con il focus;


 Paused: Activity non attiva ma visibile, non 竪 sensibile agli
eventi generati dagli utenti;


    Stopped: Activity non attiva e non visibile;


    Inactive: Activity eliminata o non ancora creata.



                                                          Corso Android
Activity




           Corso Android
Activity

Ciclo di vita

 onCreate(): Invocata nella creazione dell'Activity,
contiene le informazioni di inizializzazione;


    onStart(): Visualizzazione Activity;


 onResume(): l'Activity ha il focus ed 竪 in cima allo stack, 竪
nello stato di running;

onPause(): l'Activity non 竪 sensibile agli eventi generati



dagli utenti;

                                                    Corso Android
Activity

Ciclo di vita

 onRestart(): simile alla onCreate(), si occupa di
ripristinare lo stato;


    onStop(): l'Activity 竪 inattiva


 onDestroy(): stato di inattivit, l'Activity pu嘆 essere
eliminata.




                                                     Corso Android
Activity

Processi

  Foreground: sono quelli in esecuzione (in cima allo stack);

  Visible: eseguono le attivit nello stato di Paused, non
interagiscono con l'utente;

  Service: processi non associati ad un interfacia grafca;

  Background: processi non visibili all'utente, sui quali 竪
stato invocato il metodo onStop();

  Empty: processi non legati ad alcun componente
predefnito della piattaforma.



                                                   Corso Android
Intent



 Intent: strumento per la collaborazione di due o pi湛
componenti


    IntentFilter


    IntentResolution




                                                  Corso Android
Intent

Intent espliciti

Intent intent =
new Intent(TestActivity.this,TestSecondActivity.class);
startActivity(intent);


Intent intent= new Intent();
ComponentName comp =
new ComponentName(TestActivity.this,
                  TestSecondActivity.class)
intent.setComponent(comp);
startActivity(intent);



                                                 Corso Android
Intent



 Intent esplicite si usano quando si conosce a priori le
action da chiamare;


 Android si basa sull'utilizzo di intent che permettono la
comunicazione tra applicazioni diverse in base alle info
defnite nell'AndroidManifest.xml
 Late Runtime Binding (LRB)


 Se l'intent non specifca il componentName di
destinazione allora 竪 necessario specifcare il tipo di
azione da eseguire: Intent setAction(String action)

                                                   Corso Android
Intent

Flags
-ex FLAG_ACTIVITY_NEW_TASK
(android:process=new_process)

Intent e Dati

Specifca del tipo di dato:
scheme://host:port/path

Authority= Host + Port
Scheme: identifca il ContentProvider
<data> permette di defnire URI e mime-type

                                             Corso Android
Intent

Category

Defnita nell'IntentFilter
<category
  android:name="android.intent.category.LAUNCHER" />
Extra

Insieme di info che si possono associare ad un Intent oltra
a quelle defnite con setData()
[ putExtras(), getExtras() ]

Ex Mail: Intent.EXTRA_MAIL e Intent.EXTRA:SUBJECT

                                                  Corso Android
View e Layout




                Corso Android
View e Layout


    View


    View Group (pattern GoF Composite)


    Adapter




                                         Corso Android
View e Layout

    View


  I componenti visuali estendono: android.view.View

  Gli aggregatori estendono: android.view.View

  Ogni Activity ha una window

  Ogni view chiama la setContentView();

 R.java 竪 generato automaticamente




                                                Corso Android
View e Layout

    View


  Permetono di visualizzare l'informazione e gestire
l'interazione con l'utente

  Sono descritte tramite xml (infating)

  Sono identifcate tramite in id

  Dimensione: (Desiderata (measured),Efettiva)


 Le view contengono informazioni sui padding, mentre I
layout sui margini



                                                  Corso Android
View e Layout

Widget                       Gestione dello Stato
(android.view.View)
                             Classe interna:

  TextView                     TextView.SavedState

  Button

  CheckBox

  RadioButton

  ToggleButton

  ImageView

  AnalogClock

  DigitalClock

  ...

                                             Corso Android
View e Layout




                Corso Android
View e Layout

  Delegation Model (GoF Observer):

  Un componente esegue un azione a seguito di un evento
tramite l'entit Adapter che defnisce le operazioni che la
sorgente dell'evento chiamer per la sua notifca.



    ThreadUI (SingleThread Model)

Focus: a seconda che si usi un device con o senza tastiera



possono cambiare le modalit (textarea, button,...)



                                                  Corso Android
View e Layout




Linear Layout     Relative Layout   Table Layout




 Grid Layout        Tab Layout       List View
                                       Corso Android
View e Layout

View Group

LayoutParams
MarginLayoutParams

layout_height e layout_width
MATCH_PARENT: la view occupa tutto lo spazio disponibile
WRAP_CONTENT: la view occupa lo spazio necessario al
  proprio contenuto

layout_marginBottom, layout_marginLeft,
layout_marginRight, layout_marginTop

                                              Corso Android
View e Layout

Adapter

Componente che permette di disaccoppiare la sorgente dei
  dati dal componente responsabile per la loro
  visualizzazione, (android.widget)

DAO (data access object) interfaccia operazioni CRUD

ListAdapter: strumento per visualizzare informazioni sotto
   forma di lista scrollabile



                                                Corso Android
Toast

Visualizzazione di messaggi temporanei sullo schermo

public void showToast(View view) {

Toast toast = Toast.makeText(Context context, int
  resourceId, int duration);

    toast.show();
}

Context context = getApplicationContext();
Toast toast = Toast.makeText(context, "Hello toast!",
  Toast.LENGTH_SHORT);
toast.show();

                                              Corso Android
Menu


  Sistema (File, Edit, View...)

  Option menu (specifci dell'applicazione)

  Menu contestuali

    package android.view
public boolean onCreateOptionsMenu(Menu menu)
    ret: indica se il menu deve essere visualizzato
    invocato solo la prima volta che 竪 richiesto il menu

public boolean onPrepareOptionsMenu(Menu menu)
    invocato prima che di ogni visualizzazione del menu,
      necessario per modifcarlo dinamicamente

                                                      Corso Android
Menu

    Ogni elemento di menu (item) 竪 defnito da:


  Un identifcatore di item (itemId)

  Un identifcatore di gruppo (groupId)

  Una label (title)

  Un ordine


    Si pu嘆 identifcare ed accedere ad un gruppo di item
public abstract void setGroupVisible(int group,
  boolean visible)




                                                   Corso Android
Menu




       Corso Android
Menu

    MenuItem


  Intent

  OnMenuClickListner

  Callback


public boolean onOptionsItemSelected(MenuItem item) {
       //...
       return super.onOptionsItemSelected(item);
}




                                            Corso Android
Menu

ContextMenu
 legato alla View ma la sua gestione 竪 afdata all'Activity

public void registerForContextMenu(View view)

public void onCreateContextMenu(ContextMenu menu,
    View v, ContextMenuInfo menuInfo)




                                                 Corso Android
Dialog



  Alert

  Progress

  Date e time picker

public final void showDialog(int id)
protected Dialog onCreateDialog(int id)
private Dialog createCustomDialog() {
  Dialog myDialog = new Dialog(this);
  //...
  return customDialog;}




                                          Corso Android
Persistenza




              Corso Android
Persistenza

    Preferences

Framework per la gestione delle preferenze delle



applicazioni

public abstract SharedPreferences
  getSharedPreferences(String name, int mode)

Default Mode: Context.MODE_PRIVATE




                                               Corso Android
Persistenza

    Gestione di fle

  Java strandard: Stream

  Lettura o scrittura su Filesystem o SD card

  Lettura fle nel pacchetto apk


 public abstract FileInputStream
                  openFileInput(String name)

 public abstract FileInputStream
                 openOutputInput(String name)


    Java NIO (New I/O) utilizza i bufer

                                                Corso Android
Persistenza

Gestione di fle

String path = Environment.
   getExternalStorageDirectory().
   getAbsolutePath() + fleName.ext;

non: data/data/packageName/fles/fleName.ext;

<uses-permission android:name=
  "android.permission.WRITE_EXTERNAL_STORAGE"/>




                                            Corso Android
Persistenza

    SQLite


  DBMS compatto (500KB)

  Veloce, semplice e portabile

 android.database e android.database.sqlite

 public static SQLiteDatabase openDataBase
 (String path,
 SQLiteDatabase.CursorFactory cursorFactory,

 int flags);

 String path =
/data/data/<packageName>/database/<nameDB.db>

 int flags = CREATE_IF_NECESSARY | OPEN_READWRITE



                                             Corso Android
Persistenza

    SQLite


  ExecSQL

  delete

  Insert

  update

  replace

  query


    cursor (Iterator design pattern)



                                        Corso Android
Persistenza

    Content Provider

Repository di informazioni accessibili da applicazioni



diverse attraverso modalit standard

  URI: content://autority/path/id

  prefsso che identifca il content provider

  Content provider (www.contentprovider.com:8080)

  /data/users

  id dell'entit richiesta(opzionale)



                                                  Corso Android
Persistenza

    Mime-Type


  Composto da type/subtype (text/html, text/pdf...)

  Gestito da IANA (Internet Assigned Numbers Authority)


  Su android i Content Provider si identifcano con:

  elenco risorse: vnd.android.cursor.dir/vnd.<name>

  singola risorsa: vnd.android.cursor.item/vnd.<name>




                                                 Corso Android
Handler




          Corso Android
Handler

    UI Single Thread
Singolo thread in cui sono serializzate le callback di ui e



che regolano il ciclo di vita


  Handler

  MessageQueue (per ogni thread)

  Message (implementa Parcelable)

    defnite in android.os.




                                                    Corso Android
Handler

private Handler myHandler;

final TextView outputView = (TextView)
  findViewById(R.id.outView);

myHandler = new Handler() {
   public void handleMessage(Message msg) {
      outputView.setText(msg.obj.toString());
   }
};




                                            Corso Android
Handler

Thread workerThread = new Thread(new Runnable() {
public void run() {
  try {
    Message messageToSend = myHandler.obtainMessage();
    String message = ...;
    messageToSend.obj = message;
    myHandler.sendMessage(messageToSend);
  } catch (Exception e) {
    Log.e(LOG_TAG, e.getMessage());
  } finally {
    dismissDialog(WAITING_PROGRESS_DIALOG_ID);
  }
}
});


                                             Corso Android
WEB




      Corso Android
Web


-HttpClient di Apache (org.apache.http.client)

public abstract HttpResponse execute (HttpUriRequest
  request)

(command pattern)

HttpResponse ha tra le propriet:

  Entity (streamed, self contained, wrapping)

  Statusline (Codice risposta, versione protocollo,
    descrizione del corrispondente messaggio)


                                                      Corso Android
Web



    Get,Put (multipart),Cookie, Autenticazione.


    Xml parser (pull,dom)
    -next(), getName(), getText()...

<menu id="fle" value="File">
 <popup>
   <menuitem value="New" onclick="CreateNewDoc()" />
   <menuitem value="Open" onclick="OpenDoc()" />
   <menuitem value="Close" onclick="CloseDoc()" />
 </popup>
</menu>


                                                       Corso Android
Web



    Json parser (javascript object notation)

{"menu": {
 "id": "fle",
 "value": "File",
 "popup": {
   "menuitem": [
     {"value": "New", "onclick": "CreateNewDoc()"},
     {"value": "Open", "onclick": "OpenDoc()"},
     {"value": "Close", "onclick": "CloseDoc()"}
   ]
 }
}}


                                                      Corso Android
Web

WebWiew

Uri uri = Uri.parse("http://www.google.com");
WebView webView = (WebView)
  findViewById(R.id.webview);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.clearCache(true);
webView.loadUrl(uri.toString());

<uses-permission
  android:name="android.permission.INTERNET"/>



                                            Corso Android
Android


grazie...



              Corso Android

More Related Content

Corso Android

  • 3. Introduzione Strumenti: Java Development Kit 1.5.0 (o superiore) (http://www.oracle.com/technetwork/java/javase/ downloads/index.html) Eclipse (http://www.eclipse.org/downloads/) Android SDK (http://developer.android.com/sdk/index.html) Android Developer Tools Eclipse plugin (https://dl-ssl.google.com/android/eclipse/) Corso Android
  • 4. Introduzione Cos'竪 Android Sistema operativo+middleware+applicazioni insieme di strumenti e librerie per la realizzazione di applicazioni mobili Open (?) Utilizza librerie e tecnologie open (Kernel Linux 2.6, librerie Http Apache,...) Open Handset Alliance (OHA) Opensource Apache Licence 2.0 Corso Android
  • 5. Introduzione Corso Android
  • 6. Introduzione 2007 nasce l'Open Handset Alliance 2008 HTC G1 (limitazione tastiera fsica) 10/2008 Android 1.0 02/2009 Android 1.1 05/2009 Cupcake (Android 1.5, tastiera virtuale, widget...) 09/2009 Donut (Android 1.6 Quick search box, PICO sintetizzatore vocale...) 10/2009 Eclair (Android 2.0) 01/2010 Eclair (Android 2.1) 05/2010 Froyo (Android 2.2 JIT) 10/2010 Gingerbread (miglioramento prestazoni, SIP) 01/2011 Honeycomb (Android 3.0 Tablet) 10/2011 Ice Cream Sandwich (Tablet + Smartphone) Corso Android
  • 7. Introduzione Linguaggi di programmazione Java (SDK Java 5) Native Development KIT C/C++ Non ha la JVM ma la DVM (Dalvik VM) DVM ottimizzata per l'esecuzione di applicazioni su dispositivi con risorse limitate (fle .dex) Il fle .dex 竪 ottimizzato anche nella sua dimensione Utilizza un meccanismo di generazione di codice detto register based (java 竪 stack based), il quale comporta un numero inferiore del 30% di istruzioni Corso Android
  • 8. Introduzione JIT: si ha un'identifcazione e traduzione di parti di codice da Java a C/C++ con miglioramento delle prestazioni di esecuzione. Ogni applicazione ha un User ID diferente Ogni applicazione 竪 eseguita nel suo processo (simile a Chrome) Ogni applicazione ha una propria istanza di VM Corso Android
  • 9. Introduzione Corso Android
  • 10. Introduzione Frammentazione Le API di un particolare API Level sono disponibili in tutti I dispositivi che supportano tale versione Un device che accede al Market vedr solo le applicazioni compatibili Compatibilit Software e Hardware Corso Android
  • 11. Introduzione Schermi Screen size: Dimensione del display in pollici (Small, Normal, Large, Exra large) Aspect ratio: Rapporto tra larghezza e altezza Resolution: numero di pixel del display in orizzontale e verticale Density: numero di pixel per unit di lunghezza fsica (Low, Medium, High, Extra High) Density Indipendent: dimensione non dipendente dalla pixel (dip o dp) densit Corso Android
  • 13. Anatomia di un'applicazione Nuovo progetto su Eclipse AndroidManifest.xml Debug Log: -Verbose Log.v(string tag, string msg) -Debug Log.d(string tag, string msg) -Info Log.i(string tag, string msg) -Warning Log.w(string tag, string msg) -Error Log.e(string tag, string msg) -Assert Log.println(int priority, string tag, string msg) Disabilitare I Log per applicazione in release it.android.andlib.utility.LogUtil Corso Android
  • 14. Anatomia di un'applicazione Android Debug Bridge (adb) adb shell adb install adb uninstall Corso Android
  • 15. Componenti e risorse Activity Intent e Intent Filter Broadcast Intent Provider Content Provider Services Corso Android
  • 16. Componenti e risorse Activity Intent [Filter] UI applicazione Chiamano le Activity Package android.app Package android.content Lifecycle (onCreate(), ) Permettono di interagire Eseguite all'interno di un con servizi del sistema processo Linux String uri=content://contacts/123 Intent intent = new Intent( Intent. ACTION_GET_CONTENT,uri); Intent Filter: dichiarazione intent gestiti Corso Android
  • 17. Componenti e risorse Broadcast Intent Service Receiver Package android.app Gestione di eventi esterni Gps, rss... Package android.content Registrazione su handler di eventi specifci Corso Android
  • 18. Componenti e risorse Content Provider Gestione dati (fle, SQLite) Package android.content Di default una applicazione non pu嘆 accedere ad db si un'altra Corso Android
  • 19. Componenti e risorse Risorse Res compilate e accessibili Assets tramite la classe R Res Drawable-hdpi Assets Drawable-ldpi non compilate e gestite Drawable-mdpi attraverso la classe Layout AssetManager (android.res) Values AndroidManifest.xml Corso Android
  • 20. Componenti e risorse Tipo Cartella Costanti String /res/values R.string.<chiave> String array /res/values R.array.<chiave> Integer array /res/values R.array.<chiave> Color /res/values R.color.<chiave> Color Drowable /res/values R.drawable.<chiave> o /res/drawable Stili e temi /res/values R.style.<chiave> Dimensioni /res/values R.dimen.<chiave> Corso Android
  • 21. Componenti e risorse Tipo Cartella Costanti Animator animator R.animator Anim anim R.anim Color list /res/color Menu menu R.menu Assets assets Nessuna Drawable /res/drawable R.drawable.<flename> Xml generici /res/xml R.xml.<flename> Raw /res/raw R.raw.<flename> Corso Android
  • 22. Componenti e risorse Layout Risorse Defniscono l'aspetto UI String Editor dedicato String array ID Integer Array @[package:][+]type/name public Resources getResources() -getString( R.string.name) -getStringArray( R.array.name) -getIntAray( R.array.name) Corso Android
  • 23. Componenti e risorse Format e Plurali Color Like printf ColorStateList %[posizione]$[tipodato] Dimension [posizione]={1:n_runtime} [px, in,mm,pt,dp,sp] Stili [tipodato]={int:d, string:s,foat:f,...} Corso Android
  • 24. Componenti e risorse Drawable BitmapDrawable NinePatchDrawable ClipDrawable PictureDrawable ColorDrawable RotateDrawable GradientDrawable ScaleDrawable InsetDrawable ShapeDrawable LayerDrawable Corso Android
  • 26. Componenti e risorse Assets Non compaiono nella classe R Necessita l'utilizzo della classe AssetManager Cartella /assets Corso Android
  • 27. Activity e Intent Corso Android
  • 28. Activity Activity Le applicazioni android devono sfruttare al meglio le risorse disponibili e dare una buona percezione d'uso all'utente. Devono rispondere immediatamente alle azioni di un utente. Corso Android
  • 29. Activity Stati Active: Activity in cima allo stack, visibile e con il focus; Paused: Activity non attiva ma visibile, non 竪 sensibile agli eventi generati dagli utenti; Stopped: Activity non attiva e non visibile; Inactive: Activity eliminata o non ancora creata. Corso Android
  • 30. Activity Corso Android
  • 31. Activity Ciclo di vita onCreate(): Invocata nella creazione dell'Activity, contiene le informazioni di inizializzazione; onStart(): Visualizzazione Activity; onResume(): l'Activity ha il focus ed 竪 in cima allo stack, 竪 nello stato di running; onPause(): l'Activity non 竪 sensibile agli eventi generati dagli utenti; Corso Android
  • 32. Activity Ciclo di vita onRestart(): simile alla onCreate(), si occupa di ripristinare lo stato; onStop(): l'Activity 竪 inattiva onDestroy(): stato di inattivit, l'Activity pu嘆 essere eliminata. Corso Android
  • 33. Activity Processi Foreground: sono quelli in esecuzione (in cima allo stack); Visible: eseguono le attivit nello stato di Paused, non interagiscono con l'utente; Service: processi non associati ad un interfacia grafca; Background: processi non visibili all'utente, sui quali 竪 stato invocato il metodo onStop(); Empty: processi non legati ad alcun componente predefnito della piattaforma. Corso Android
  • 34. Intent Intent: strumento per la collaborazione di due o pi湛 componenti IntentFilter IntentResolution Corso Android
  • 35. Intent Intent espliciti Intent intent = new Intent(TestActivity.this,TestSecondActivity.class); startActivity(intent); Intent intent= new Intent(); ComponentName comp = new ComponentName(TestActivity.this, TestSecondActivity.class) intent.setComponent(comp); startActivity(intent); Corso Android
  • 36. Intent Intent esplicite si usano quando si conosce a priori le action da chiamare; Android si basa sull'utilizzo di intent che permettono la comunicazione tra applicazioni diverse in base alle info defnite nell'AndroidManifest.xml Late Runtime Binding (LRB) Se l'intent non specifca il componentName di destinazione allora 竪 necessario specifcare il tipo di azione da eseguire: Intent setAction(String action) Corso Android
  • 37. Intent Flags -ex FLAG_ACTIVITY_NEW_TASK (android:process=new_process) Intent e Dati Specifca del tipo di dato: scheme://host:port/path Authority= Host + Port Scheme: identifca il ContentProvider <data> permette di defnire URI e mime-type Corso Android
  • 38. Intent Category Defnita nell'IntentFilter <category android:name="android.intent.category.LAUNCHER" /> Extra Insieme di info che si possono associare ad un Intent oltra a quelle defnite con setData() [ putExtras(), getExtras() ] Ex Mail: Intent.EXTRA_MAIL e Intent.EXTRA:SUBJECT Corso Android
  • 39. View e Layout Corso Android
  • 40. View e Layout View View Group (pattern GoF Composite) Adapter Corso Android
  • 41. View e Layout View I componenti visuali estendono: android.view.View Gli aggregatori estendono: android.view.View Ogni Activity ha una window Ogni view chiama la setContentView(); R.java 竪 generato automaticamente Corso Android
  • 42. View e Layout View Permetono di visualizzare l'informazione e gestire l'interazione con l'utente Sono descritte tramite xml (infating) Sono identifcate tramite in id Dimensione: (Desiderata (measured),Efettiva) Le view contengono informazioni sui padding, mentre I layout sui margini Corso Android
  • 43. View e Layout Widget Gestione dello Stato (android.view.View) Classe interna: TextView TextView.SavedState Button CheckBox RadioButton ToggleButton ImageView AnalogClock DigitalClock ... Corso Android
  • 44. View e Layout Corso Android
  • 45. View e Layout Delegation Model (GoF Observer): Un componente esegue un azione a seguito di un evento tramite l'entit Adapter che defnisce le operazioni che la sorgente dell'evento chiamer per la sua notifca. ThreadUI (SingleThread Model) Focus: a seconda che si usi un device con o senza tastiera possono cambiare le modalit (textarea, button,...) Corso Android
  • 46. View e Layout Linear Layout Relative Layout Table Layout Grid Layout Tab Layout List View Corso Android
  • 47. View e Layout View Group LayoutParams MarginLayoutParams layout_height e layout_width MATCH_PARENT: la view occupa tutto lo spazio disponibile WRAP_CONTENT: la view occupa lo spazio necessario al proprio contenuto layout_marginBottom, layout_marginLeft, layout_marginRight, layout_marginTop Corso Android
  • 48. View e Layout Adapter Componente che permette di disaccoppiare la sorgente dei dati dal componente responsabile per la loro visualizzazione, (android.widget) DAO (data access object) interfaccia operazioni CRUD ListAdapter: strumento per visualizzare informazioni sotto forma di lista scrollabile Corso Android
  • 49. Toast Visualizzazione di messaggi temporanei sullo schermo public void showToast(View view) { Toast toast = Toast.makeText(Context context, int resourceId, int duration); toast.show(); } Context context = getApplicationContext(); Toast toast = Toast.makeText(context, "Hello toast!", Toast.LENGTH_SHORT); toast.show(); Corso Android
  • 50. Menu Sistema (File, Edit, View...) Option menu (specifci dell'applicazione) Menu contestuali package android.view public boolean onCreateOptionsMenu(Menu menu) ret: indica se il menu deve essere visualizzato invocato solo la prima volta che 竪 richiesto il menu public boolean onPrepareOptionsMenu(Menu menu) invocato prima che di ogni visualizzazione del menu, necessario per modifcarlo dinamicamente Corso Android
  • 51. Menu Ogni elemento di menu (item) 竪 defnito da: Un identifcatore di item (itemId) Un identifcatore di gruppo (groupId) Una label (title) Un ordine Si pu嘆 identifcare ed accedere ad un gruppo di item public abstract void setGroupVisible(int group, boolean visible) Corso Android
  • 52. Menu Corso Android
  • 53. Menu MenuItem Intent OnMenuClickListner Callback public boolean onOptionsItemSelected(MenuItem item) { //... return super.onOptionsItemSelected(item); } Corso Android
  • 54. Menu ContextMenu legato alla View ma la sua gestione 竪 afdata all'Activity public void registerForContextMenu(View view) public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) Corso Android
  • 55. Dialog Alert Progress Date e time picker public final void showDialog(int id) protected Dialog onCreateDialog(int id) private Dialog createCustomDialog() { Dialog myDialog = new Dialog(this); //... return customDialog;} Corso Android
  • 56. Persistenza Corso Android
  • 57. Persistenza Preferences Framework per la gestione delle preferenze delle applicazioni public abstract SharedPreferences getSharedPreferences(String name, int mode) Default Mode: Context.MODE_PRIVATE Corso Android
  • 58. Persistenza Gestione di fle Java strandard: Stream Lettura o scrittura su Filesystem o SD card Lettura fle nel pacchetto apk public abstract FileInputStream openFileInput(String name) public abstract FileInputStream openOutputInput(String name) Java NIO (New I/O) utilizza i bufer Corso Android
  • 59. Persistenza Gestione di fle String path = Environment. getExternalStorageDirectory(). getAbsolutePath() + fleName.ext; non: data/data/packageName/fles/fleName.ext; <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE"/> Corso Android
  • 60. Persistenza SQLite DBMS compatto (500KB) Veloce, semplice e portabile android.database e android.database.sqlite public static SQLiteDatabase openDataBase (String path, SQLiteDatabase.CursorFactory cursorFactory, int flags); String path = /data/data/<packageName>/database/<nameDB.db> int flags = CREATE_IF_NECESSARY | OPEN_READWRITE Corso Android
  • 61. Persistenza SQLite ExecSQL delete Insert update replace query cursor (Iterator design pattern) Corso Android
  • 62. Persistenza Content Provider Repository di informazioni accessibili da applicazioni diverse attraverso modalit standard URI: content://autority/path/id prefsso che identifca il content provider Content provider (www.contentprovider.com:8080) /data/users id dell'entit richiesta(opzionale) Corso Android
  • 63. Persistenza Mime-Type Composto da type/subtype (text/html, text/pdf...) Gestito da IANA (Internet Assigned Numbers Authority) Su android i Content Provider si identifcano con: elenco risorse: vnd.android.cursor.dir/vnd.<name> singola risorsa: vnd.android.cursor.item/vnd.<name> Corso Android
  • 64. Handler Corso Android
  • 65. Handler UI Single Thread Singolo thread in cui sono serializzate le callback di ui e che regolano il ciclo di vita Handler MessageQueue (per ogni thread) Message (implementa Parcelable) defnite in android.os. Corso Android
  • 66. Handler private Handler myHandler; final TextView outputView = (TextView) findViewById(R.id.outView); myHandler = new Handler() { public void handleMessage(Message msg) { outputView.setText(msg.obj.toString()); } }; Corso Android
  • 67. Handler Thread workerThread = new Thread(new Runnable() { public void run() { try { Message messageToSend = myHandler.obtainMessage(); String message = ...; messageToSend.obj = message; myHandler.sendMessage(messageToSend); } catch (Exception e) { Log.e(LOG_TAG, e.getMessage()); } finally { dismissDialog(WAITING_PROGRESS_DIALOG_ID); } } }); Corso Android
  • 68. WEB Corso Android
  • 69. Web -HttpClient di Apache (org.apache.http.client) public abstract HttpResponse execute (HttpUriRequest request) (command pattern) HttpResponse ha tra le propriet: Entity (streamed, self contained, wrapping) Statusline (Codice risposta, versione protocollo, descrizione del corrispondente messaggio) Corso Android
  • 70. Web Get,Put (multipart),Cookie, Autenticazione. Xml parser (pull,dom) -next(), getName(), getText()... <menu id="fle" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu> Corso Android
  • 71. Web Json parser (javascript object notation) {"menu": { "id": "fle", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }} Corso Android
  • 72. Web WebWiew Uri uri = Uri.parse("http://www.google.com"); WebView webView = (WebView) findViewById(R.id.webview); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); webView.clearCache(true); webView.loadUrl(uri.toString()); <uses-permission android:name="android.permission.INTERNET"/> Corso Android
  • 73. Android grazie... Corso Android