corso android
DESCRIPTION
Corso teorico praticoTRANSCRIPT
![Page 1: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/1.jpg)
Corso Android
Android
Corso teorico pratico
![Page 2: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/2.jpg)
Corso Android
WHOAMI
Andrea Putzu[Software Engineer]
![Page 3: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/3.jpg)
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/)
![Page 4: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/4.jpg)
Corso Android
Introduzione
✔Cos'è AndroidSistema 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
![Page 5: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/5.jpg)
Corso Android
Introduzione
![Page 6: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/6.jpg)
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)
![Page 7: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/7.jpg)
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
![Page 8: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/8.jpg)
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
![Page 9: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/9.jpg)
Corso Android
Introduzione
![Page 10: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/10.jpg)
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
![Page 11: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/11.jpg)
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 dallapixel (dip o dp) densità
![Page 12: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/12.jpg)
Corso Android
Introduzione
QVGA
HVGA
WVGA
![Page 13: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/13.jpg)
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
![Page 14: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/14.jpg)
Corso Android
Anatomia di un'applicazione
✔Android Debug Bridge (adb)✔adb shell✔adb install ✔adb uninstall✔…
![Page 15: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/15.jpg)
Corso Android
Componenti e risorse
✔Activity✔Intent e Intent Filter✔Broadcast Intent Provider✔Content Provider✔Services
![Page 16: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/16.jpg)
Corso Android
Componenti e risorse
Activity
✔UI applicazione✔Package android.app✔Lifecycle (onCreate(), …)✔Eseguite all'interno di un processo Linux
Intent [Filter]
✔Chiamano le Activity✔Package android.content✔Permettono di interagire
con servizi del sistema
String uri=“content://contacts/123”Intent intent = new Intent( Intent.
ACTION_GET_CONTENT,uri);
Intent Filter: dichiarazione intent gestiti
![Page 17: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/17.jpg)
Corso Android
Componenti e risorse
Broadcast Intent Receiver
✔Gestione di eventi esterni✔Package android.content✔Registrazione su handler di eventi specifci
Service
✔Package android.app✔Gps, rss...
![Page 18: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/18.jpg)
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
![Page 19: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/19.jpg)
Corso Android
Componenti e risorse
Risorse
✔Assets✔Res
✔ Drawable-hdpi✔ Drawable-ldpi✔ Drawable-mdpi
✔Layout✔Values✔AndroidManifest.xml
✔Rescompilate e accessibili
tramite la classe R
✔Assetsnon compilate e gestite
attraverso la classe AssetManager (android.res)
![Page 20: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/20.jpg)
Corso Android
Componenti e risorse
Tipo
StringString arrayInteger arrayColorColor Drowable
Stili e temiDimensioni
Cartella
/res/values/res/values/res/values/res/values/res/valueso /res/drawable/res/values/res/values
Costanti
R.string.<chiave>R.array.<chiave>R.array.<chiave>R.color.<chiave>R.drawable.<chiave>
R.style.<chiave>R.dimen.<chiave>
![Page 21: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/21.jpg)
Corso Android
Componenti e risorse
Tipo
AnimatorAnimColor listMenuAssetsDrawableXml genericiRaw
Cartella
animatoranim/res/colormenuassets/res/drawable/res/xml/res/raw
Costanti
R.animatorR.anim
R.menuNessunaR.drawable.<flename>R.xml.<flename>R.raw.<flename>
![Page 22: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/22.jpg)
Corso Android
Componenti e risorse
Layout
✔Defniscono l'aspetto UI✔Editor dedicato✔ID@[package:][+]type/name
Risorse
✔String✔String array✔Integer Array
✔public Resources getResources()-getString( R.string.name)-getStringArray( R.array.name)-getIntAray( R.array.name)
![Page 23: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/23.jpg)
Corso Android
Componenti e risorse
✔Color✔ColorStateList✔Dimension[px, in,mm,pt,dp,sp]
✔Stili
Format e Plurali
✔Like printf%[posizione]$[tipodato][posizione]={1:n_runtime}[tipodato]={int:d,
string:s,foat:f,...}
![Page 24: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/24.jpg)
Corso Android
Componenti e risorse
✔NinePatchDrawable✔PictureDrawable✔RotateDrawable✔ScaleDrawable✔ShapeDrawable
Drawable
✔BitmapDrawable✔ClipDrawable✔ColorDrawable✔GradientDrawable✔InsetDrawable✔LayerDrawable
![Page 25: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/25.jpg)
Corso Android
Componenti e risorse
NinePatchDrawable
![Page 26: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/26.jpg)
Corso Android
Componenti e risorse
Assets
✔Non compaiono nella classe R✔Necessita l'utilizzo della classe AssetManager✔Cartella /assets
![Page 27: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/27.jpg)
Corso Android
Activity e Intent
![Page 28: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/28.jpg)
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.
![Page 29: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/29.jpg)
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.
![Page 30: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/30.jpg)
Corso Android
Activity
![Page 31: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/31.jpg)
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;
![Page 32: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/32.jpg)
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.
![Page 33: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/33.jpg)
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.
![Page 34: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/34.jpg)
Corso Android
Intent
✔Intent: strumento per la collaborazione di due o più componenti
✔IntentFilter
✔IntentResolution
![Page 35: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/35.jpg)
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);
![Page 36: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/36.jpg)
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.xmlLate 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)
![Page 37: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/37.jpg)
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 + PortScheme: identifca il ContentProvider<data> permette di defnire URI e mime-type
![Page 38: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/38.jpg)
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
![Page 39: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/39.jpg)
Corso Android
View e Layout
![Page 40: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/40.jpg)
Corso Android
View e Layout
•View
•View Group (pattern GoF Composite)
•Adapter
![Page 41: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/41.jpg)
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
![Page 42: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/42.jpg)
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
![Page 43: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/43.jpg)
Corso Android
View e Layout
Widget (android.view.View)
•TextView•Button•CheckBox•RadioButton•ToggleButton•ImageView•AnalogClock•DigitalClock•...
Gestione dello Stato
Classe interna: TextView.SavedState
![Page 44: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/44.jpg)
Corso Android
View e Layout
![Page 45: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/45.jpg)
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,...)
![Page 46: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/46.jpg)
Corso Android
View e Layout
Linear Layout Relative Layout Table Layout
Grid Layout Tab Layout
Linear Layout
List View
![Page 47: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/47.jpg)
Corso Android
View e Layout
View Group
LayoutParamsMarginLayoutParams
layout_height e layout_widthMATCH_PARENT: la view occupa tutto lo spazio disponibileWRAP_CONTENT: la view occupa lo spazio necessario al
proprio contenuto
layout_marginBottom, layout_marginLeft,layout_marginRight, layout_marginTop
![Page 48: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/48.jpg)
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
![Page 49: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/49.jpg)
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();
![Page 50: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/50.jpg)
Corso Android
Menu
•Sistema (File, Edit, View...)•Option menu (specifci dell'applicazione)•Menu contestuali
package android.viewpublic 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
![Page 51: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/51.jpg)
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 itempublic abstract void setGroupVisible(int group, boolean visible)
![Page 52: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/52.jpg)
Corso Android
Menu
![Page 53: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/53.jpg)
Corso Android
Menu
MenuItem
•Intent•OnMenuClickListner•Callback
public boolean onOptionsItemSelected(MenuItem item) { //... return super.onOptionsItemSelected(item);}
![Page 54: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/54.jpg)
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)
![Page 55: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/55.jpg)
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;}
![Page 56: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/56.jpg)
Corso Android
Persistenza
![Page 57: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/57.jpg)
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
![Page 58: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/58.jpg)
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
![Page 59: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/59.jpg)
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"/>
![Page 60: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/60.jpg)
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
![Page 61: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/61.jpg)
Corso Android
Persistenza
SQLite
•ExecSQL•delete•Insert•update•replace•query
•cursor (Iterator design pattern)
![Page 62: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/62.jpg)
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)
![Page 63: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/63.jpg)
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>
![Page 64: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/64.jpg)
Corso Android
Handler
![Page 65: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/65.jpg)
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.
![Page 66: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/66.jpg)
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()); }};
![Page 67: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/67.jpg)
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); }}});
![Page 68: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/68.jpg)
Corso Android
WEB
![Page 69: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/69.jpg)
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)
![Page 70: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/70.jpg)
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>
![Page 71: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/71.jpg)
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()"} ] }}}
![Page 72: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/72.jpg)
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"/>
![Page 73: Corso Android](https://reader031.vdocuments.net/reader031/viewer/2022020105/55583db9d8b42acb078b4d5a/html5/thumbnails/73.jpg)
Corso Android
Android
grazie...