Slides 2017
Slides 2017
Slide
per favore … 2
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Info corso 3 Vendite per OS 4
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Orario lezioni
– Lunedì 15:00-17:00 Aula F8
– Giovedì 14:00-16:00 Aula F8
• Ricevimento
– Martedì 11:00-13:00
– Giovedì 16:00-17:00
Slide Slide
Vendite per OS 5 Telefoni android prodotti da 6
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
ed altri …
1
9/25/17
Slide Slide
Vendite per marca 7 Altre motivazioni 8
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Cosa faremo nel corso 9 Cosa faremo nel corso 10
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Argomenti 11 Risorse didattiche 12
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Layout • Lezioni!!!!
• Listener • Google
• Intent – http://developer.android.com
• Permessi – http://developer.android.com/guide
• Piattaforma Android – http://developer.android.com/training
• Alarms
• Android Studio • Books
• Frammenti
• Emulatore – BigNerd Ranch (in inglese)
• Networking – http://www.bignerdranch.com/
• Grafica • Cursera
• Sensori – ottimo video corso (in inglese)
• Multimedia – https://www.coursera.org/course/android
• Data storage • Googling!
2
9/25/17
Slide Slide
Sito e piattaforma S3 13 Contest 14
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Contest – albo d’oro 15 Esame 16
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Come contattare il docente 17 Domande? 18
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Email
– Risposta non garantita, dipende dalla domanda!
– Condizione necessaria: il messaggio deve contenere
il nome del mittente
– Appuntamento
• NON telefonare
3
9/25/17
Slide
La piattaforma Android 20
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
L’architettura Android 21 Linux kernel Layer 22
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Fornisce i servizi di
base del sistema
operativo
– filesystem
– gestione della memoria e dei processsi
Si basa su un – gestione dell’interfaccia di rete
kernel Linux – drivers per le periferiche
• Servizi specifici per Android
– gestione della batteria
– gestione della memoria condivisa
– low memory killer
– interprocess communication e altre
Slide Slide
Hardware Abstraction Layer 23 Java 24
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
4
9/25/17
Slide Slide
File dex e ART 25 Android runtime: ART e Dalvik VM 26
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• App:
– Scritte in Java
– Compilate in file Java Bytecode
– Un tool, DX, trasforma i file bytecode in un singolo
file Dex Bytecode (classes.dex) • ART: Android Runtime è una VM specifica per sistemi Android
– CPU meno veloci (rispetto ad un PC)
– Il file classes.dex contiene anche tutte i file di dati – Meno RAM
necessari e viene istallato sulla target device – Batteria con durata limitata
– ART Virtual Machine esegue il file Dex
• ART: da 5.0 API level 21
• Dalvik: API level < 21
• App che funzionano bene su ART dovrebberofunzionare bene
anche su Dalvik
– Il contrario no
Slide Slide
Librerie native 27 Application framework 28
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Applicazioni (app) 29 Versioni 30
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
5
9/25/17
Slide
Android Studio 32
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Istallare l’ADT
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• L’interfaccia
Android
Developer • L’emulatore Android
• Altri strumenti
31
Slide Slide
Istallazione ADT 33 Android Studio 2.3 34
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
http://developer.android.com/sdk • Richiede:
– Java 8
– Intel Hardware Accelerated Execution Manager
HAXM (per l’emulatore)
• Offre
– Piattaforma Android
– Android SDK Tools
• sviluppo
• debug
– Gradle
– Emulatore Android
è necessario avere Java 8 istallato e per l’emulatoreIntel HAXM
Slide Slide
Modalità sviluppatore 35 Listeners 36
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Modalità sviluppatore • Gli oggetti della classe View hanno dei metodi
– Info dispositivo, Versione build “listeners”
• Click 7 volte – sono in “ascolto” per entrare in azione quando si
verifica un evento specifico
• Comparirà il menu Opzioni Sviluppatore
• Ad esempio
• Debug USB – un pulsante ha il metodo onClickche viene eseguito
– Attivare quando l’utente preme il pulsante
– Dare il consenso per l’accesso
6
9/25/17
Slide Slide
Prima app: CiaoMondo 37 CiaoMondo 38
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
CiaoMondo 39 SDK 40
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Informazioni
– dipendenze da altro codice
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Slide Slide
SDK 41 Emulatore Android 42
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Occorre istallare le versioni per le quali si vuole • Android Virtual Device Manager
sviluppare
7
9/25/17
Slide Slide
Emulatore vs. real device 43 Emulatore 44
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide
Emulatore 45
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Layouts
Non è possibile lanciare due istanze della stessa AVD: occorre creare due AVD
diverse e lanciare un’istanza di ognuna.
Layout
46
Slide Slide
Layouts 47 Layouts 48
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Layout • XML
– Definiscono l’aspetto grafico dell’interfaccia utente – vantaggi
• facile da specificare
• separa in modo netto la definizione dell’UI dal codice
• Si possono definire in due modi dell’applicazione (facile fare modifiche)
8
9/25/17
Slide Slide
Layout – elementi base (esempi) 49 Layout - ViewGroup 50
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Button
• Relative Layout
<Button android:id="@+id/button"
android:layout_width="wrap_content"
• Grid Layout (griglia)
android:layout_height="wrap_content" Ciao, sono un Pulsante • Frame (contenitore)
android:text=”Ciao, sono un Pulsante"
android:background=”#00FF00” />
Slide Slide
Layout - XML Un solo elemento 51 Layout - XML - attributi 52
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco
“radice” in ogni file XML Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Layout - XML - attributi 53 Layout - XML - attributi 54
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
9
9/25/17
Slide Slide
Layout – posizione e grandezza 55 Layout – padding e margini 56
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
android:layout_padding="10px"
12px
Slide Slide
Misure pixel: px vs. dp 57 Misure Pixel 58
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Screen size
– grandezza reale del display (es. 4’’)
• Screen density
– Quanti pixel ci sono nell’unità di area
• raggrupppati in: low, medium, high e extra high
• es 240 dpi = 240 dot-per-inch
• px = pixel reali
– es. 240 dpi x 4’’ => 960 pixel
• dp (dip) = density independent pixels
– dimensione calcolata su una densità di 160 dpi
• un “dp” ha le dimensioni di un “px” a 160 dpi
– la dimensione non dipenderà dalla densità reale
Slide Slide
Alternative per i “drawable” 59 Unità di misura 60
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Una buona app dovrebbe fornire alternative per gli • dp, density-independent pixels
oggetti da disegnare (drawable)
• sp, scale-independent pixels
• Esempio: l’icona dell’applicazione dovrebbe essere – scalato in base alle preferenze dell’utente sulla
fornita in 4 versioni: grandezza del font
– 36x36 pixel per display con densità low • pt, points (1/72 di inch)
– 48x48 pixel per display con densità medium
– 72x72 pixel per display con densità high • px, real pixels
– 96x96 pixel per display con densità extra high • mm, millimetri
• Tutte le immagini in 4 versioni • in, inches
– Da Android 4.3, directory mipmap
• MIP, Multum In Parvo (molto in poco)
10
9/25/17
Slide Slide
Layouts – Linear Layout 61 Layouts – Linear Layout 62
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Layouts – Linear Layout 63 Layouts – Relative Layout 64
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Layouts – Relative Layout 65 Layouts – Grid View 66
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
11
9/25/17
Slide Slide
Layouts – Grid Layout 67 Layouts – List View 68
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" • Visualizza un insieme di elementi organizzati in
android:background="#abcdef"
android:columnCount="3" una lista
android:rowCount="3” >
<Button – numero totale variabile
android:background="#aa55ee"
android:id="@+id/button1" – visibile solo una parte
android:text="Button 1" />
<Button
– scroll
android:id="@+id/button2"
android:text="Button 2" />
<Button
android:id="@+id/button3" • Adapter
android:layout_column="2"
android:layout_row="2" – fornisce gli elementi da inserire nel List View
android:text="Button 3" />
• lo vedremo in seguito
<Button
android:id="@+id/button4"
android:text="Button 4" />
</GridLayout>
Slide
Layouts - widget 69
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• TextView
• Button An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• TextEdit
• ImageView La nostra
•
•
CheckBox
RadioButton
prima
• … e molti altri (vera) app
– es. Orologio
Layouts 70
Slide
Prima app 71
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Calcolatrice
– Una sola “Activity” An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
– Pulsanti
• Listeners
– TextView
Android Studio
Debugger
Calcolatrice
72
12
9/25/17
Slide Slide
Copiare un intero progetto 73 Android Studio Debugger 74
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Android Studio Debugger 75 Android Studio Debugger 76
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Selezionare la device
Slide Slide
Breakpoints 77 Comandi debugger 78
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
13
9/25/17
Slide Slide
Debugger 79 Messaggi di log: Log.X 80
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• x può essere
– d: debug
– e: errore
– i: info
– w: warning
– v: verbose
Slide Slide
Monitor 81 Logcat 82
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide
Widgets 84
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Widgets
Widgets
83
14
9/25/17
Slide Slide
ListView 85 ListView 86
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Gli elementi vengono memorizzati in un array • File xml per il singolo elemento della lista
– solitamente sono di più rispetto alle posizioni disponibili <?xml version="1.0" encoding="utf-8" ?>
nel widget <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent” android:layout_height="match_parent”>
– Si può “scorrere” la lista <TextView
android:id="@+id/textViewList"
android:layout_width="wrap_content"
• Adapter android:layout_height="wrap_content"
android:text="" android:padding="10dp"
– fornisce gli elementi da visualizzare in base allo android:textSize="22dp"/>
scorrimento effettuato dall’utente </LinearLayout>
Slide Slide
ListView 87 ListView 88
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Definire l’array con gli elementi • Definire un listener per i click sugli elementi
– String [] array = {"Pasquale","Maria","Michele","Antonella", "Vincenzo",
"Teresa", "Roberto", "Rossella", "Antonio", "Luca", "Liliana", "Stefania",
"Francesca", "Andrea", "Marco", "Elisa", "Anna", "Lorenzo"};
listView.setOnItemClickListener(new OnItemClickListener() {
Slide Slide
ListView 89 ListView 90
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
15
9/25/17
Slide
ListView 91
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
ListaCustom
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Ciclo di vita
ListaSemplice ListaCustomMClick 92
Slide Slide
Ciclo di vita delle attività 93 Ciclo di vita delle attività 94
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Ciclo di vita delle attività 95 Ciclo di vita delle attività 96
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
16
9/25/17
Slide Slide
Ciclo di vita delle attività 97 onSaveInstanceState 98
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• onCreate()
• Lo si recupera in onCreate()
• onStart()
@Override
• onResume() protected void onCreate(Bundle savedInstanceState) {
…
if (savedInstanceState != null) {
array_di_stringhe = savedInstanceState.getStringArrayList("LISTA_STRINGHE");
• onDestroy(): perdita dello stato!!!! counter = savedInstanceState.getInt("CONTATORE");
}
}
Slide Slide
Main activity 99 Ciclo di vita delle attività 100
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Backstack 101 Backstack 102
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Un’app normalmente è fatta di più activity • Un’attività può lanciare un’altra attività
– ogni activity ha uno specifico compito – anche attività che appartengono ad altre app
• modularità
• Class “Intent”
• Es. un’app per la posta elettronica – serve a lanciare una nuova attività e “passare” i dati
– un’attività per la scrittura del messaggio all’attività che si lancia
– un’attività per spedire il messaggio – la vedremo fra poco
– un’attività per vedere una lista dei messaggi
– un’attività per vedere il contenuto di un messaggio • Task
– ecc. – è un insieme di attività con cui l’utente interagisce
17
9/25/17
Slide Slide
Backstack 103 Backstack 104
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Foreground e background 105 Istanze multiple 106
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Un task con le sue attività può essere spostato in • Se un’attività può essere lanciata da più di
“background” un’altra attività si possono avere istanze multiple
– quando l’utente inizia un nuovo task oppure preme il
pulsante Home
– Le attività vengono messe in stato di stop, ma il loro
backstack rimane intatto
MultiActivity
http://developer.android.com/guide/components/tasks-and-back-stack.html
Slide
VisualizzaMappa 107
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Visualizza la mappa
– sfrutta un’attività dell’app VisualizzaMappa
GoogleMaps 108
18
9/25/17
Slide Slide
Classe Intent 109 Intent 110
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Intent 111 Intent 112
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Intent 113 Intent 114
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Intent i; @Override
i = newIntent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); protected void onActivityResult(int request, int result, Intent data) {
startActivityForResult(i, REQUEST_CODE); if (request == REQUEST_CODE && result == Activity.RESULT_OK) {
…
• Azione: ACTION_PICK
– Chiede di selezionare un item
• onActivityResult
• Data: – viene chiamato quando si ritorna all’attività di
partenza
– ContactsContract.Contacts.CONTENT_URI
– “content://com.android.contacts/contacts” – permette di controllare il risultato restituito
• controlliamo il REQUEST_CODE
• startActivityForResult
• in questo caso anche un flag di OK
– lancia l’attività chiedendo un risultato
• gestiamo i dati restituiti
– REQUEST_CODE serve ad identificare la richiesta
19
9/25/17
Slide Slide
Intent Extras 115 Intent Flags 116
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
c = intent.getExtra(“CONTATORE”);
stringa = intent.getExtra(“S TRINGA”);
Bundle b = intent.getExtras();
Slide Slide
Intent Component 117 Intent 118
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
//oppure
intent.setComponent(…);
intent.setClass(…);
intent.setClassName(…);
Slide
Quiz 119
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
120
20
9/25/17
Slide Slide
Permessi 121 Permessi 122
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Permessi 123 Permessi normali (API 23, 6.0) 124
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• ACCESS_LOCATION_EXTRA_COMMANDS• NFC
• I permessi sono divisi in due classi • ACCESS_NETWORK_STATE • READ_SYNC_SETTINGS
– Normali e “pericolosi” • ACCESS_NOTIFICATION_POLICY • READ_SYNC_STATS
• ACCESS_WIFI_STATE • RECEIVE_BOOT_COMPLETED
• BLUETOOTH • REORDER_TASKS
• I permessi normali vengono concessi senza •
•
BLUETOOTH_ADMIN
BROADCAST_STICKY
•
•
REQUEST_INSTALL_PACKAGES
SET_TIME_ZONE
chiedere nulla all’utente • CHANGE_NETWORK_STATE • SET_WALLPAPER
• CHANGE_WIFI_MULTICAST_STATE • SET_WALLPAPER_HINTS
• I permessi “pericolosi” devono essere approvati • CHANGE_WIFI_STATE • TRANSMIT_IR
dall’utente • DISABLE_KEYGUARD • USE_FINGERPRINT
• EXPAND_STATUS_BAR • VIBRATE
– quando si istalla l’app (API < 23) • FLASHLIGHT • WAKE_LOCK
– a runtime (API >= 23) • GET_PACKAGE_SIZE • WRITE_SYNC_SETTINGS
• INTERNET • SET_ALARM
• KILL_BACKGROUND_PROCESSES • INSTALL_SHORTCUT
• MODIFY_AUDIO_SETTINGS • UNINSTALL_SHORTCUT
Slide Slide
Permessi pericolosi (API 23, 6.0) 125 Permessi pericolosi (API 23, 6.0) 126
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
21
9/25/17
Slide
Threads 127
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
stack
– condivide con gli altri thread del processo l’heap e la
memoria statica
p1 p2 p3 p4
Threads
t1 t3 t7
t4 ... t6 t8 ...
t2
t5 t9
Slide Slide
Java Threads 129 Threads 130
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Threads 131 Threads 132
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Metodi
– boolean View.post(Runnable action)
– void Activity.runOnUiThread(Runnable action)
22
9/25/17
Slide Slide
Threads 133 Async task 134
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Background thread
– esegue il task
ThreadSi – notifica sullo stato di avanzamento
Slide Slide
AsyncTask 135 AsyncTask.execute() 136
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide
AsyncTask 137
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Fragments
ThreadAsyncTask
138
23
9/25/17
Slide Slide
Fragments 139 Fragments 140
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Fragments 141 Fragments 142
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Fragments 143 Fragments 144
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Si può usare
– un frammento per l’elenco
– un frammento per la visualizzazione
• Se lo schermo è piccolo
– sarà visibile solo uno dei frammenti
• cliccando un titolo si passerà dal frammento titoli al
frammento visualizzazione
• Se lo schermo è grande
– saranno visualizzati entrambi i frammenti
24
9/25/17
Slide Slide
Creare frammenti 145 Creare frammenti 146
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Creare frammenti 147 Fragments 148
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Creare frammenti 149 Creare frammenti 150
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
25
9/25/17
Slide Slide
Gestire i frammenti 151 Gestire i frammenti 152
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Esempi 153 Comunicare con l’activity 154
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
FragmentsLifecycle
• Ad es. il frammento può definire un interfaccia
public static class MyFragment extends Fragment {
...
// Container Activity must implement this interface
public interface OnArticleSelectedListener {
public void onArticleSelected(int index);
FragmentsLifeCycleDyn }
...
}
Slide Slide
Comunicare con l’activity 155 Comunicare con l’activity 156
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Frammento B
• App Frammento A Main Activity
– lista Interfaccia Implementa
– dettagli elementi Communicator Communicator
void res pond dettaglio(index) {
mos tra dettagli index
}
onCreate {
• Frammento lista
A.s etCommunicator(this )
}
– diminuisce la riusabilità } }
26
9/25/17
Slide Slide
Frammenti e backstack 157 Esempi 158
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Frammenti e backstack
FrammentiBackstack
– i frammenti non vengono inseriti nel backstack
– quando premiamo il pulsante back
• si ritorna alla precedente activity
• saltando eventuali cambiamenti dell’UI dovuti all’uso dei
frammenti
FragmentCartelle
– se si vuole occorre gestire il backstack manualmente
Slide
Frammenti 159
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Esercizio (avanzato)
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Networking 161 Networking 162
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• HTTP • InetAddress.getByName(“www.server.com”);
– org.apache • InetAddress.getByName(“11.22.33.44”);
• HttpRequest
• Httpresponse
• Restituisce l’indirizzo IP
• Data formats – stringa di 32 bit per IPv4
– JSON, XML – stringa di 128 bit per IPv6
27
9/25/17
Slide Slide
Networking 163 Networking 164
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Networking 165 Networking 166
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• BufferedReader in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
• in.readLine(), in.read(), …
SocketRawProgressBar
Slide Slide
URL e HTTP 167 HTTP 168
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
28
9/25/17
Slide Slide
Networking 169 Documenti HTML 170
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
JSoup 171 Networking 172
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Esempi:
– Document doc =
Jsoup.connect("http://en.wikipedia.org/").get();
– Element e = doc.getElementById(“id”);
– Elements e = doc.select(“[class=id”);
SocketJSoup
Slide
Data Storage 174
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Shared Preferences
–dati privati, coppie chiave-valore
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• File
Data Storage –File privati dell’app
–File pubblici (accessibili da altre app)
• Database SQLite
–Dati strutturati in database privati
173
29
9/25/17
Slide Slide
SharedPreferences 175 SharedPreferences 176
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
File 177 File 178
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Per ogni app il sistema operativo prevede una String FILENAME = "hello_file";
directory privata String string = "hello world!";
– solo l’app può accedere a questa directory FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
– se l’app viene disinstallata, la directory viene fos.write(string.getBytes());
cancellata fos.close();
Slide Slide
File 179 File 180
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
30
9/25/17
Slide Slide
File temporanei 181 File su External Storage 182
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Per i file temporanei si può usare una directory • Android permette l’utilizzo di una memoria esterna
cache – tipicamente una SD card
– Android cancellerà i file in questa directory SE
necessario (quando manca spazio) • File nella memoria esterna sono pubblici (world-
readable)
• getCacheDir()
– restituisce la directory cache • Occorre richiedere il permesso di lettura/scrittura
– è comunque responsabilità dell’app cancellare i file
– non si dovrebbe usare la directory cache per file • La memoria esterna può essere rimossa
grandi (grandezza massima raccomandata 1MB) – quindi non si può assumere che i file siano sempre
disponibili
Slide Slide
External Storage 183 External Storage 184
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
<manifest ...> /* Checks if external storage is available for read and write */
<uses-permission public boolean isExternalStorageWritable() {
android:name="android.permission.WRITE_EXTERNAL_STORAGE” String state = Environment.getExternal Storag eState();
android:maxSdkVersion="18" if (Environment.MEDIA_MOUNTED.equals(state)) {
/> return true;
… }
</manifest>
return false;
}
• Permesso Write include il permesso Read /* Checks if external storage is available to at least read */
<manifest ...> public boolean isExternalStorageReadable() {
<uses-permission String state = Environment.getExternal Storag eState();
android:name="android.permission.READ_EXTERNAL_STORAGE” if (Environment.MEDIA_MOUNTED.equals(state) ||
/> Environment.MEDIA_MOUNTED_READ_ONLY.equ als(state)) {
… return true;
</manifest> }
return false;
Apartire da Android 4.4,per lo spazio privato non c’è bisogno di permessi. }
Slide Slide
Condividere file con altre app 185 SQL – Quick tutorial 186
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Tavole
• Esempio: metodo che crea una nuova dir per – ogni riga è un elemento
delle foto nella dir pubblica delle immagini – ogni colonna rappresenta un campo
31
9/25/17
Slide Slide
SQL – Quick tutorial 187 SQL – Quick tutorial 188
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
SQL – Quick tutorial 189 SQL – Quick tutorial 190
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, ’Adele', 25, ’Milano', ID NAME AGE ADDRESS SALARY
1500.00 ); 1 Marco 32 Napoli 2000
2 Adele 25 Milano 1500
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, ’Carla', 23, ’Palermo',
2000.00 ); 3 Carla 23 Palermo 2000
4 Maria 25 Roma 6500
5 Pasquale 27 Firenze 8500
INSERT INTO CUSTOMERS VALUES (4, ’Maria', 25, ’Roma', 6500.00 ); 6 Renato 22 Venezia 4500
INSERT INTO CUSTOMERS VALUES (5, ’Pasquale', 27, ’Firenze', 8500.00 );
Slide Slide
SQL – Quick tutorial 191 SQL – Quick tutorial 192
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Esempi di update
• Esempi di select
UPDATE CUSTOMERS SET ADDRESS = ‘Salerno’ WHERE ID = 5
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS;
ID NAME AG E AD D RESS SALARY
32
9/25/17
Slide Slide
Database 193 Database 194
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Android fornisce supporto per database SQL • Sul database si possono applicare comandi
– solo all’interno dell’app standard SQL
Slide Slide
Database 195 Data Storage 196
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
MyOpenHelper(Context context) {
super(context, TABLE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_CMD); DataStoragePreferences
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// override necessario
} DataStorageSQL
}
Slide
Grafica 198
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
33
9/25/17
Slide Slide
Grafica 199 Animazioni 200
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• L’oggetto Drawable deve essere inserito • Android permette di definire delle animazioni da
nell’oggetto View applicare alle immagini
– direttamente nel file XML
– in modo programmatico • Descritte con file XML
• View.setImageDrawable()
– rotazione
– traslazione
– scaling (dimensione)
– trasparenza
– con controllo di vari parametri
• es., punto di pivot, velocità, etc.
GraficaSimpleImg
Slide Slide
Animazioni 201 Custom Views 202
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
GraficaImgAnim
Slide Slide
Albero delle View 203 Meccanismo di layout 204
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
34
9/25/17
Slide Slide
Meccanismo di layout 205 Misura 206
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
onMeasure() 207 MeasureSpec 208
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Layout 209 Disegnare nel canvas 210
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Nella fase di Layout le view container • Quando la view è stata posizionata verrà
comunicano la posizione effettiva ad ogni view disegnata
figlio – metodo onDraw
public class MyView extends Views{
…
@Override • Oggetto Paint e metodi dell’oggetto Canvas
public void onLayout (int x1, int y1, int x2, int y2) {
Log.d("DEBUG","onLayout”); public class MyView extends Views{
Log.d("DEBUG","coordinate x1="+x1+" y1="+y1+" x2="+x2+" y2="+y2); …
int smw = getSuggestedMinimumWidth(); @Override
int smh = getSuggestedMinimumHeight(); public void onDraw (Canvas canvas) {
Log.d("DEBUG","onLayout smw="+smw+" smh="+smh); //Codice per disegnare la view
setMeasuredDimension(smw,smh); } }
….
….
} }
35
9/25/17
Slide Slide
Esempi 211 Multitouch 212
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• MotionEvent
– rappresenta un movimento registrato da una
periferica
• penna, trackball, mouse
• dita sul display
Slide Slide
Multitouch 213 Multitouch 214
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Multitouch 215 Multitouch 216
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
36
9/25/17
Slide Slide
Multitouch 217 Multitouch 218
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Multitouch 219 Multitouch 220
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• onTouchEvent()
– deve restituire un Boolean • onTouch viene chiamata prima che la View
• true, se l’evento è stato consumato venga notificata dell’evento
• false, altrimenti – anche onTouch deve restituire un Boolean
• true, se l’evento è stato consumato
• false, altrimenti
• Oggetti che vogliono ricevere la notifica
– View.onTouchListener
– View.setOnTouchListener()
Slide Slide
Multitouch 221 Multitouch 222
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
37
9/25/17
Slide Slide
GestureDetector 223 GestureDetector 224
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
ViewAnimator e ViewFlipper 225 GestureDetector 226
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• View Animator
– classe per un contenitore di tipo FrameLayout
– animazione cambiamento fra view
• Simple ViewAnimator
– sottoclasse di ViewAnimator
– crea animazione fra 2 o più view del contenitore
– Solo una view per volta viene visualizzata
– Può anche cambiare views ad intervalli regolari
GestureFlip
• metodi
– showNext()
– showPrevious()
Implementare ancheil fling per il decremento
Slide
MediaPlayer 228
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• AudioManager
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
– controlla le sorgenti audio e l’output
• volume
• MediaPlayer
– Play di audio e video
Media player
• Sorgente dati
– Risorse locali
– URI (interni)
– URL
227
38
9/25/17
Slide Slide
MediaPlayer 229 MediaPlayer 230
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
MediaPlayer 231 MediaPlayer 232
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
mediaPlayer.release();
mediaPlayer = null; • Poichè c’è un solo canale di output
– l’utilizzo da parte di più applicazioni può essere un
problema
• mediaPlayer.start(); • es. se stiamo ascoltando musica potremmo non sentire l’arrivo
• mediaPlayer.pause(); di un messaggio
• mediaPlayer.stop();
• È possibile gestire l’accesso contemporaneo usando
• Attenzione all’uso asincrono (prepareAsynch) l’audio focus
– necessario per non appesantire l’app – un’app richiede l’audio focus per usare l’audio
– richiede più attenzione – se lo perde deve o smettere di suonare o abbassare il
• Play da fare in/dopo onPrepareListener.onPrepared()
proprio volume
Slide
MediaPlayer 233
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Sensori
MusicPlayer
39
9/25/17
Slide Slide
Sensori 235 Sensori 236
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
Sensori 237 Sensori 238
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Pochi device hanno tutti i tipi di sensori • Coordinate fisse: se la device ruota
– a volte più di un sensore dello stesso tipo – il sistema di riferimento rimane fermo
– ecco un elenco parziale: – cambieranno i valori letti sugli assi
Sensore Tipo Descrizione y y
TYPE_ACCELEROMETER Hw Misura le forze in m/s2 applicate alla device
(inclusa la gravità) nelle 3 direzioni (x,y,z)
TYPE_AMBIENT_TEMPERATURE Hw Misura la temperatura dell’ambiente in gradi
centigradi
TYPE_GRAVITY Hw o Sw Misura le forze di gravità sui 3 assi (x,y,z)
x x
TYPE_GYROSCOPE Hw Misura la velocità di rotazione in rad/s nelle 3
direzioni (x,y,z)
TYPE_MAGNETIC_FIELD Hw Misura il campo magnetico sui tre assi z z
TYPE_ORIENTATION Sw Misura la rotazione riferita ai 3 assi
TYPE_RELATIVE_HUMIDITY Hw Misura la % di umidità dell’ambiente
TYPE_LIGHT Hw Misura la luminosità dell’ambiente
Slide Slide
Sensori 239 Sensori 240
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
40
9/25/17
Slide Slide
Sensori 241 Sensori 242
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
@Override
public final void onCreate(Bundle savedInstanceState) {
….
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
@Override
public final void onAccuracyChanged(Sensorsensor, int accuracy) {
// Do something here if sensor accuracy changes.
}
@Override
public final void onSensorChanged(SensorEvent event) {
// The light sensor returns a single value, Many sensors return 3 values, one for each axis.
float lux = event.values[0];
…
}
Accelerometro
Slide
Notifications 244
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Notifications
243
Slide
Alarms 246
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
41
9/25/17
Slide Slide
Alarms 247 Alarms 248
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Gli alarms rimangono attivi fino a quando • Per usare gli alarm in un’app
– vengono cancellati – AlarmManager
– la periferica viene spenta
• Ottenere un riferimento all’AlarmManager:
• Esempi di alarms – getSystemService(Context.ALARM_SERVICE)
– app per gli MMS: usa alarm per controllare
periodicamente i messaggi non spediti (retry • Creare alarms
scheduler)
– void set(int type, long triggerAtTime, PendingIntent i)
– Settings: usa un alarm per rendere la periferica non
visibile via Bluetooth dopo un determinato tempo – void setRepeating(…)
A partire dall’API level 19 (KitKat) gli alarm non sono “esatti”: il SO operativo
può modificare i triggerTime perminimizzare wakeups e l’uso della batteria
Slide
Oltre le Activity 250
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
249
• Nelle prossime slide ci sono dei cenni
Slide Slide
Broadcasts 251 Content providers 252
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
42
9/25/17
Slide Slide
Services 253 Broadcast ed eventi 254
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Parleremo
– della classe BroadcastReceiver
– di come un “ricevitore di broadcast” deve essere
“registrato”
– dei modi in cui gli eventi possono essere inviati ai
ricevitori di broadcast
– di come i ricevitori ricevono una notifica di un
evento
– di come i ricevitori gestiscono la notifica
Slide Slide
BroadcastReceiver 255 BroadcastReceiver 256
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• serve per ricevere e “reagire” ad eventi • Il ricevitore riceve l’Intent tramite il metodo
– eventi sono rappresentati da Intents – onReceive(Context c, Intent i)
Slide Slide
Registrazione BroadcastReceiver 257 Registrazione BroadcastReceiver 258
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
43
9/25/17
Slide Slide
Spedizione broadcast 259 Esempi 260
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
BroadcastReceiver 261 ContentProvider 262
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
ContentProvider 263 ContentProvider 264
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Per usare il resolver occorre recuperare un suo • I dati contenuti in un provider sono memorizzati
riferimento chiamando in tabelle
– Context.getContentResolver()
• Gli utenti possono far riferimento ad uno
• ContentProviders standard specifico ContentProvider usando un URI
– Browser (info su bookmarks, history)
– Call Log (info sulle chiamate) • URI: content://authority/path/id
– Contact (info sui contatti presenti in rubrica)
– authority: specifica il content provider
– Media (lista dei file multimediali utilizzabili)
– path: specifica la tabella
– UserDictionary (lista delle parola digitate) – id: specifica un particolare record
– … molti altri
44
9/25/17
Slide Slide
ContentProvider 265 ContentProvider 266
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
Slide Slide
ContentProvider 267 Services 268
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Vedremo
– La classe Services
– come usare dei Services esistenti
– come definire dei nuovi Services
ContentProvider
Slide Slide
Services 269 Services 270
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Services non interagiscono con l’utente • Una volta partito, il Service può continuare la sua
esecuzione fino a che la device è accesa
– non c’è una UI – potrebbe anche essere interrotto se occorrono le risorse
che esso usa
– potrebbe anche terminare volontariamente
• Servono per eseguire delle operazioni in
background • Nell’utilizzo tipico un Service fatto partire da un’app
termina la propria esecuzione dopo aver eseguito
l’operazione richiesta
• L’app interagisce con il servizio
• per default, il Service gira nel main thread dell’app
che lo ha fatto partire
• La prima cosa da fare è far partire il Service – in alcuni casi deve essere esplicitamente fatto girare su
– Context.startService(Intent i) un thread separato
45
9/25/17
Slide Slide
Services 271 Services 272
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
• Le componenti che vogliono interagire con un Service • Occorre dichiarare il Service nel Manifesto:
devono effettuare un “bind”
– Context.bindService(Intent service,
ServiceConnection conn,
int flags);
<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
• Il binding permette di …
<application
– inviare richieste …
– ricevere riposte <service
android:name=”MyService”
</servicer>
• Se al momento delle richiesta di bind il Service non è </application>
</manifest>
ancora attivo
– viene fatto partire
– rimane attivo fino a quando c’è almeno un client connesso
Slide Slide
Services 273 Services 274
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8 An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
ServiceSimple
Slide
Buon Natale! 276
An d ro i d M o bi l e P rogrammi n g – P ro f. R . De P ri sco Un i versi tà d i Sal ern o - a.a. 2 0 1 7 -2 01 8
275
46