* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT S ERVIZI E N OTIFICHE.

Slides:



Advertisements
Presentazioni simili
CONCLUSIONE - Nucleo (o Kernel) Interagisce direttamente con lhardware Interagisce direttamente con lhardware Si occupa dellesecuzione.
Advertisements

Funzioni Friend Come abbiamo visto non possiamo accedere a membri privati di una classe dall'esterno della classe. Ma a volte abbiamo bisogno di farlo.
AVVIARE IL COMPUTER WINDOWS ‘98 Queta fase è definita BOOTSTRAP
Informatica Recupero debito quarto anno Terzo incontro.
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
Comunicare con la posta elettronica (7.4)
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Fondamenti di Informatica
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Applet Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio Java
Uso di openafs Come usare il tool openafs per accedere e gestire i propri files sotto AFS.
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 1 Programmi concorrenti: quanto è lungo un millisecondo? In un normale personal computer.
Programmazione II: Tecniche Avanzate. (A.A. 1999/2000) - Lezione 6 1 Estensione di classi: il Contratto INTERFACCIA E REALIZZAZIONE Che cosa realizza una.
I Thread.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Sistemi Operativi GESTIONE DEI PROCESSI.
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
Intent e Intent Filters. Intents Un Intent può contenere dati che possono essere utilizzati dalla componente che riceve. Ad esempio, un'Activity chiama.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Progetto di una architettura per lesecuzione distribuita e coordinata di azioni Progetto per lesame di Reti di Calcolatori L-S Prof. Antonio Corradi Finistauri.
Android questo sconosciuto … Cosa sapere per poter cominciare a sviluppare Apps Cosa sapere per poter cominciare a sviluppare Apps. Alessandro Franceschetti.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Introduzione alla programmazione Object Oriented
Servizi Grid ed agenti mobili : un ambiente di sviluppo e delivering
Programmazione concorrente
Il World Wide Web Lidea innovativa del WWW è che esso combina tre importanti e ben definite tecnologie informatiche: Documenti di tipo Ipertesto. Sono.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Final Project Review byNight byNight March 15th,2012.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
Amministrazione della rete: web server Apache
Console del Dipendente
Threads.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
1 Videopoker esempio di applicazione in java. 2 Videopoker Un giocatore, con un portofaglio iniziale il giocatore punta il banco da 5 carte il giocatore.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Gestione dei thread in Java
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Strumenti per la gestione efficiente di connessioni tra terminali mobili Android Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Corso.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Reti di calcolatori LS1 Service Middleware Reti di calcolatori LS progetto di Andrea Belardi Infrastruttura dedicata alla gestione di servizi disponibili.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
CORSO INTERNET la Posta elettronica
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT C ONCORRENZA.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT E LEMENTI BASE.
+ Geolocalizzazione Nicolò Sordoni. + Servizi di localizzazione In Windows Phone, la posizione dell’utente può essere rilevata in 3 differenti modi: GPS:
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT M APPE.
Introduzione alle Classi e agli Oggetti in Java 1.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT UI PERSONALIZZATE.
Gestire la navigazione. Creare un’app multi Controller La quasi totalità delle app è suddivisa in più ViewControllers, ognuno con specifiche funzionalità.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT Liste e dynamic.
Android Intent, AlertDialog, SharedPreferences. Intents.
Transcript della presentazione:

* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT S ERVIZI E N OTIFICHE

* * 1.Servizi a. started b. bound 2.Notifiche Sommario

* * Cos’è un Service (servizio)? ●È un componente di un’app che può fare operazioni ad esecuzione continua in background. Non fornisce un’interfaccia utente. ●Un diverso componente dell’app può: ○far partire un servizio che continuerà a girare in background anche se l’utente passa ad un’altra applicazione ○può legarsi ad un servizio, interagire con esso e svolgere operazioni. Esempi: un servizio può gestire le reti, suonare musica, leggere e scrivere files, interagire con content provider, il tutto in background.

* * Servizio started Un servizio è started quando il componente di un’app (come una activity) lo fa partire usando il metodo startService(). Una volta avviato un servizio è eseguito in background in maniera continua, anche se il componente che l’ha avviato viene distrutto. Solitamente un servizio started esegue un’operazione e non restituisce un risultato a chi l’ha avviato. Quando l’operazione è completa il servizio dovrebbe fermarsi da solo. Ad esempio potrebbe scaricare o caricare un file in rete.

* * Un servizio è bound quando componente di un’app si lega a esso usando il metodo bindService(). Un servizio bound offre un’interfaccia client-server che permette ai componenti di interagire con il servizio, mandare richieste, e ottenere risultati. Un servizio bound è eseguito solo quando il componente di un’altra app è legato ad esso. Più componenti possono legarsi al servizio contemporaneamente. Quando tutti i componenti sono slegati il servizio viene distrutto. Servizio bound

* * Un servizio può essere sia started che bound! Un servizio è eseguito nel main thread dell’app in cui è definito, non crea un proprio thread e non gira in un processo separato, a meno che lo sviluppatore non lo faccia manualmente. Questo significa che se il servizio userà molta CPU o farà operazioni bloccanti sarebbe meglio creare un nuovo thread dove farlo eseguire. Questo riduce il rischio di Application Not Responding (ANR,, “L’applicazione non risponde”) mentre il main thread dell’app rimane dedicato all’interazione con l’utente. Servizio: attenzione!

* * Bisogna creare una sottoclasse di Service (o di una delle esistenti sottoclassi). Nell’implementazione bisogna fare override di alcuni metodi che gestiscono il ciclo di vita del servizio e forniscono ai componenti delle app un meccanismo per fare bound, se necessario. onStartCommand() Il sistema chiama questo metodo quando un componente dell’app richiede che il servizio venga attivato, usando il metodo startService(). Quando viene eseguito il servizio gira in background all’infinito. È responsabilità dello sviluppatore fermare il servizio quando ha svolto il suo compito con i metodi stopSelf() o stopService(). (Volendo fare solo bound non è necessario implementare questo metodo.) Creazione di un servizio

* * Creazione di un servizio #2 onBind() Il sistema chiama questo metodo quando un altro componente vuole fare bound con questo servizio chiamando il metodo bindService(). Nell’implementazione di questo metodo lo sviluppatore deve fornire un’interfaccia che i client possono usare per comunicare con il servizio, restituendo l’implementazione di un IBinder. Questo metodo va sempre implementato ma se non si vuole permettere il binding basta restituire null.

* * Creazione di un servizio #3 onCreate() Il sistema chiama questo metodo quando il servizio viene creato, per fare eventuali operazioni di configurazione, prima sia di onStartCommand() che di onBind(). Se il servizio è già in esecuzione il metodo non viene chiamato. onDestroy() Il sistema chiama questo metodo quando il servizio non è più usato e viene distrutto. Lo sviluppatore dovrebbe implementare questo metodo per far pulizia di eventuali risorse come thread, listeners, receivers, etc. Questo è l’ultimo metodo chiamato dal servizio.

* * Creazione di un servizio #4 Aggiungere il servizio al manifest Modificare il file AndroidManifest.xml e aggiungere la dichiarazione del service all’elemento

* * Creazione di un servizio #5 public class MyService extends Service public int onStartCommand(Intent intent, int flags, int startId) { // TODO do something useful return Service.START_NOT_STICKY; public IBinder onBind(Intent intent) { // TODO for communication return IBinder implementation return null; } }

* * Creazione di un servizio #6 Nel metodo onStartCommand() il servizio restituisce un int che definisce il comportamento di riavvio del servizio stesso nel caso sia terminato da Android. Si possono usare queste costanti: Service.START_STICKY: il servizio è riavviato se viene terminato. I dati che passati al metodo onStartCommand sono null. Si usa con servizi che gestiscono il proprio stato e che non dipendono dagli Intent data. Service.START_NOT_STICKY: il servizio non viene riavviato. Si usa per servizi che vengono in ogni caso richiamati in altri modi. Il servizio viene riavviato solo se ci sono chiamate startService() pendenti da prima della sua terminazione. Service.START_REDELIVER_INTENT: similmente a Service.START_STICKY ma l’Intent originale viene rispedito al metodo onStartCommand.

* * Uso di un servizio Intent i= new Intent(context, MyService.class); // è possibile aggiungere dati all’intent i.putExtra("chiave", "valore passato"); context.startService(i); È possibile fermare un servizio con il metodo stopService(). Non importa quanto frequentemente si chiama startService(intent), basta una chiamata a stopService() per fermare il servizio. Un servizio può terminare sé stesso usando il metodo stopSelf(). Questo è solitamente utilizzato quando un servizio finisce di fare ciò per cui è stato lanciato. Come si lancia un servizio? Con un Intent!

* * Uso di un servizio #2 Se una activity vuole interagire direttamente con il servizio può usare il metodo bindService() per farlo partire. Questo metodo richiede un oggetto ServiceConnection come parametro. Questo oggetto viene utilizzato dal servizio in fase di start e in fase di finish del metodo onBind(). Viene restituito un oggetto IBinder che può essere usato dall’activity per comunicare con il servizio. Quando il processo di binding finisce viene chiamato il metodo onStartCommand() con l’oggetto intent che era stato passato al metodo bindService(). Per slegarsi dal servizio si usa il metodo unbindService().

* * Communicare con servizio Ci sono diversi metodi:  facendo binding locale del servizio. Si usa quando il servizio si accede dalla stessa app.  facendo binding remoto del servizio: Si usa quando il servizio si accede anche dalle altre app. Usare AIDL per specificare l’interfaccia.  utilizzando Messenger per mandare/ricevere messaggi al servizio. Anche in questo caso dai processi remoti ma senza implementare AIDL.  utilizzando mezzi infrastrutturali del sistema/applicazione: DB o broadcast. Si usa in casi semplici.

* * Communicare con servizio: binding locale #1 Definire binder: public class LocalBinder extends Binder { LocalService getService() { return LocalService.this; } } private final IBinder mBinder = new public IBinder onBind(Intent intent) { return mBinder; }

* * Communicare con servizio: binding locale #2 Definire client: private LocalService mBoundService; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName cName, IBinder service) { mBoundService = ((LocalService.LocalBinder)service).getService(); … // qui si utilizza il servizio } public void onServiceDisconnected(ComponentName className) {... } } … // si connette al servizio bindService(new Intent(this, LocalService.class), mConnection, Context.BIND_AUTO_CREATE);

* * Notifiche Una notifica è un messaggio che può essere mostrato all’utente al di fuori della normale interfaccia dell’app. Quando si dice al sistema di mostrare una notifica questa prima di tutto appare come icona nella notification area. Per vedere i dettagli della notifica l’utente apre il notification drawer. Sia la notification area che il notification drawer sono aree controllate dal sistema che l’utente può consultare quando vuole.

* * Notifiche #2 Per creare una notifica si usa la classe NotificationManager che si può ottenere dal Context tramite il metodo getSystemService(). NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Il Notification.Builder fornisce una interfaccia per creare un oggetto Notification. Poi si usa un PendingIntent per specificare l’azione che verrà eseguita una volta selezionata la notifica. Il Notification.Builder permette di aggiungere fino a tre bottoni con azioni da definire per ogni notifica.

* * Notifiche #3 // prepariamo l’Intent che verrà lanciato // quando verrà selezionata la notifica Intent intent = new Intent(this, NotificationReceiver.class); PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0); // costruiamo la notifica Notification n = new NotificationCompat.Builder(this).setContentTitle("New mail!").setContentText("Subject").setSmallIcon(R.drawable.icon).setContentIntent(pIntent).setAutoCancel(true).addAction(R.drawable.icon, "Call", pIntent).addAction(R.drawable.icon, "More", pIntent).addAction(R.drawable.icon, "And more", pIntent).build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(0, n);