Permessi 95 Android protegge risorse e dad con un meccanismo di permessi di accesso Servono a limitare l accesso a informazioni dell utente (e.g. i contai della rubrica) servizi con cosd (e.g., invio SMS, chiamate tel., accesso a Internet) Risorse di sistema (e.g., fotocamera, GPS) Permessi 96 Vengono rappresentad da stringhe Ogni app deve dichiarare nel manifesto i permessi che intende udlizzare <uses- permission android:name = android.permission.camera /> <uses- permission android:name = android.permission.internet /> <uses- permission android:name = android.permission.access_fine_location /> L utente deve accevare i permessi al momento dell istallazione 1
Threads 97 Computazione parallela all interno di un processo Ogni thread ha il proprio program counter ed il proprio stack condivide con gli altri thread del processo l heap e la memoria stadca p1 p2 p3 p4 t1 t3 t7 t2 t4... t6 t8... t5 t9 CPU 1 CPU 2 Java Threads 98 OggeI java.lang.thread Implementano l interfaccia runnable devono aver il metodo void run() Metodi che useremo void start() void sleep(long Dme) void wait() aspeva che un altro oggevo chiami nodfy() su questo oggevo void nodfy() 2
Threads 99 Per usare un thread: Creare un oggevo Thread Chiamare il metodo start() del thread che chiamerà il metodo run() APP (main thread) new Thread start() run() Threads 100 ThreadNo 3
Threads 101 Android non permeve ai thread in background di interagire con l interfaccia utente Solo il main thread può farlo Non possiamo aggiornare l immagine nel thread creato per caricare l immagine Metodi boolean View.post(Runnable acdon) void AcDvity.runOnUiThread(Runnable acdon) Threads 102 ThreadSi 4
Async task Facilitano l interazione fra background thread e main thread 103 Background thread esegue il task nodfica sullo stato di avanzamento Main (UI) thread setup iniziale display dello stato di avanzamento usa i risultad (es. mostrandoli sul display) AsyncTask 104 Classe Java generica class AsyncTask<Params, Progress, Result> { } Parametri Params: Dpo (di dad) per il lavoro che deve svolgere il background thread Progress: Dpo (di dad) usato per lo stato di avanzamento Result: Dpo (di dad) per il risultato del task 5
AsyncTask.execute() void onpreexecute() eseguito nel main thread prima di doinbackground() Result doinbackground(params params) viene eseguito lista variabile di parametri resdtuisce un oggevo di Dpo Result può chiamare void publishprogress(progress values) void onprogressupdate(progress values) nel main thread in risposta a publishprogress void onpostexecute(result result) nel main thread DOPO doinbackground() con il risultato di doinbackground come parametro 105 AsyncTask 106 ThreadAsyncTask 6
FrammenD (API level 11) Interfacce utente dinamiche si adavano facilmente a schermi di grandezze varie 107 Frammento rappresenta una porzione di UI una sorta di sub- aività ha il suo layout ha il suo ciclo di vita AIvità può avere uno o più frammend è facile inserire/rimuovere frammend FrammenD Situazione Dpica in cui sono udli i frammend un app che udlizza una lista e per ogni elemento della lista dei devagli 108 7
FrammenD Un frammento deve sempre essere ospitato da un aività 109 Può essere inserito stadcamente (nel layout file) dinamicamente (con il FragmentManager) Quando il frammento viene inserito diventa un ViewGroup all interno della View dell aività Ciclo di vita dei frammend legato a quello dell aività che lo ospita FrammenD 110 8
FrammenD 111 A7vità Frammento FrammenD 112 FragmentsExample hvp://developer.android.com/guide/components/fragments.html 9
Alarms PermeVono di eseguire intent in funzione di specifici evend 113 Un applicazione che usa un alarm riesce ad eseguire porzioni di codice anche se l applicazione è terminata Un alarm è aivo anche se il telefono va in modalità di sleep l alarm può causare la ripresa dell aività oppure potrà essere gesdto quando l utente rimeve il telefono in modalità normale Alarms 114 Gli alarms rimangono aivi fino a quando vengono cancellad la periferica viene spenta Esempi di alarms app per gli MMS: usa alarm per controllare periodicamente i messaggi non spedid (retry scheduler) SeIngs: usa un alarm per rendere la periferica non visibile via Bluetooth dopo un determinato tempo 10
Alarms 115 Per usare gli alarm in un app AlarmManager OVenere un riferimento all AlarmManager: getsystemservice(context.alarm_service) Creare alarms void set(int type, long triggerattime, PendingIntent i) void setrepeadng( ) A pardre dall API level 19 (KitKat) gli alarm non sono esai : il SO operadvo può modificare i triggertime per minimizzare wakeups e l uso della baveria 11