SlideShare 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

What's hot

I package Android
I package AndroidI package Android
I package Android
Flavius-Florin Harabor
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
Marco Gasparetto
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitale
lostrettodigitale
 
Lezione Android prima parte
Lezione Android prima parteLezione Android prima parte
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
Lorenzo Braghetto
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione JavaMassimiliano Brolli
 
Mobile platforms development overview
Mobile platforms development overviewMobile platforms development overview
Mobile platforms development overview
Alfredo Morresi
 

What's hot (9)

I package Android
I package AndroidI package Android
I package Android
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitale
 
Lezione Android prima parte
Lezione Android prima parteLezione Android prima parte
Lezione Android prima parte
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione Java
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
Corso progettazione
Corso progettazioneCorso progettazione
Corso progettazione
 
Mobile platforms development overview
Mobile platforms development overviewMobile platforms development overview
Mobile platforms development overview
 

Viewers also liked

Android
AndroidAndroid
Android
Stefano Sanna
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
Open Makers Italy
 
Programmazione android per esseri umani
Programmazione android per esseri umaniProgrammazione android per esseri umani
Programmazione android per esseri umani
Roberto Bettazzoni
 
Android Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insiemeAndroid Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insieme
Francesco De Simone
 
Mobile Apps Per iOS , visione d'insieme
Mobile Apps Per iOS , visione d'insiemeMobile Apps Per iOS , visione d'insieme
Mobile Apps Per iOS , visione d'insieme
Francesco De Simone
 
Quarta lezioneandroid
Quarta lezioneandroidQuarta lezioneandroid
Terza lezioneandroid
Terza lezioneandroidTerza lezioneandroid
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...Raffaella D'angelo
 
Condividere una presentazione
Condividere una presentazioneCondividere una presentazione
Condividere una presentazioneMorello1988
 
1. Introduzione al corso
1. Introduzione al corso1. Introduzione al corso
1. Introduzione al corso
Roberto Polillo
 
Android seminar ppt
Android seminar pptAndroid seminar ppt
Android seminar ppt
chakrapani tripathi
 
Android seminar-presentation
Android seminar-presentationAndroid seminar-presentation
Android seminar-presentation
connectshilpa
 
Android ppt
Android pptAndroid ppt
Android ppt
srikanth982
 
Presentation on Android operating system
Presentation on Android operating systemPresentation on Android operating system
Presentation on Android operating system
Salma Begum
 
Android ppt
Android ppt Android ppt
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
Leslie Samuel
 

Viewers also liked (16)

Android
AndroidAndroid
Android
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
Programmazione android per esseri umani
Programmazione android per esseri umaniProgrammazione android per esseri umani
Programmazione android per esseri umani
 
Android Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insiemeAndroid Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insieme
 
Mobile Apps Per iOS , visione d'insieme
Mobile Apps Per iOS , visione d'insiemeMobile Apps Per iOS , visione d'insieme
Mobile Apps Per iOS , visione d'insieme
 
Quarta lezioneandroid
Quarta lezioneandroidQuarta lezioneandroid
Quarta lezioneandroid
 
Terza lezioneandroid
Terza lezioneandroidTerza lezioneandroid
Terza lezioneandroid
 
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
 
Condividere una presentazione
Condividere una presentazioneCondividere una presentazione
Condividere una presentazione
 
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
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Similar to Corso Android

01 Android - Introduction
01   Android - Introduction01   Android - Introduction
01 Android - Introduction
spawn150
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
Paolo Tosato
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma Android
Alessandro Forte
 
Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
Emanuel Di Nardo
 
Whymca Dive into Android [ITA]
Whymca Dive into Android [ITA]Whymca Dive into Android [ITA]
Whymca Dive into Android [ITA]
Emanuele Di Saverio
 
Introduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big DataIntroduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big Data
Vincenzo Manzoni
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30
Riccardo Mancinelli
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Nativo vs Xamarin pro e contro
Nativo vs Xamarin pro e controNativo vs Xamarin pro e contro
Nativo vs Xamarin pro e contro
Carmelo Ruota
 
Nativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e controNativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e contro
Marco Rinaldi
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8massimiliano.wosz
 
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
jekil
 
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni android
Paolo Montalto
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
Simone Viani
 
Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv
Codemotion
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
Enrico Zimuel
 
Job opportunities in_google_emea
Job opportunities in_google_emeaJob opportunities in_google_emea
Job opportunities in_google_emeafirenze-gtug
 
Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, ProgettoAlartzero
 
Bpm 2015 03-21-v1
Bpm 2015 03-21-v1Bpm 2015 03-21-v1
Bpm 2015 03-21-v1
Vincenzo Virgilio
 

Similar to Corso Android (20)

01 Android - Introduction
01   Android - Introduction01   Android - Introduction
01 Android - Introduction
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma Android
 
Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
 
Whymca Dive into Android [ITA]
Whymca Dive into Android [ITA]Whymca Dive into Android [ITA]
Whymca Dive into Android [ITA]
 
Introduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big DataIntroduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big Data
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
Nativo vs Xamarin pro e contro
Nativo vs Xamarin pro e controNativo vs Xamarin pro e contro
Nativo vs Xamarin pro e contro
 
Nativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e controNativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e contro
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8
 
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
 
Sviluppare applicazioni android
Sviluppare applicazioni androidSviluppare applicazioni android
Sviluppare applicazioni android
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv Sviluppo e deployment cross-platform: Dal mobile alla Tv
Sviluppo e deployment cross-platform: Dal mobile alla Tv
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
 
Job opportunities in_google_emea
Job opportunities in_google_emeaJob opportunities in_google_emea
Job opportunities in_google_emea
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, Progetto
 
Bpm 2015 03-21-v1
Bpm 2015 03-21-v1Bpm 2015 03-21-v1
Bpm 2015 03-21-v1
 

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