Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Sviluppo di applicazioni modulari e interoperabil...
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Andrea Baccega Founder DroidTech.it Co-Founder An...
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Dario Lipari Android Apps: Modus Operandi, Swappe...
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni <ul><li>Un'applicazione modulare è un'applicazion...
<ul><li>Android dispone di classi native per la comunicazione tra applicazioni diverse e componenti della stessa applicazi...
<ul><li>Un Intent è semplicemente l'esplicitazione di un'intenzione </li></ul><ul><li>Vorrei avviare un'applicazione </li>...
<ul><li>Permette di passare dati attraverso l'utilizzo della classe Bundle e all'implementazione di Parcelable e Serializa...
Come trasportare i dati da chi lancia l'intent a chi li riceve? Grazie all'oggetto Bundle che è incapsulato all'interno de...
Parcelable (interfaccia specifica Android) è più indicato se i dati non devono essere serializzati: infatti il modo in cui...
L'oggetto Bundle è molto flessibile e permette di contenere i dati in ogni formato ;) E' possibile utilizzare anche un ogg...
Ecco il Manifest del BroadcastReceiver che riceve un intent: Sviluppo di applicazioni modulari e interoperabilità tra le a...
Ecco il codice che lancia un intent: Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Intent inten...
Ecco il codice del BroadcastReceiver che riceve l'intent, ma sopratutto ne riceve i dati: Sviluppo di applicazioni modular...
Un caso reale: Modus Operandi permette di configurare Android sulla base di situazioni, composte da condizioni da verifica...
AlarmManager è utilizzato come Scheduler: In questo modo ad intervalli regolari Modus Operandi può effettuare il controllo...
Un Thread specifico è lanciato dal BroadcastReceiver che riceve l'intent di AlarmManager per effettuare il controllo delle...
Una Condizione, come un'Azione, è composta da un BroadcastReceiver e da un'Activity. Il BroadcastReceiver serve per verifi...
Ci sono Condizioni da verificare? Start check Situazione Core lancia Intent per verificare la Condizione La condizione è v...
Tips E' possibile usare PackageManager per verificare che il plugin che si sta chiamando è davvero installato oppure no. Q...
I Servizi
I Servizi – Che Cosa sono? <ul><li>Il Servizio è un componente dell’applicazione utilizzato per eseguire un’operazione di ...
I Servizi – Cosa Non sono? <ul><li>Il Service NON è: </li></ul><ul><ul><li>Un processo separato </li></ul></ul><ul><ul><li...
I Servizi – I Due Tipi di Servizio <ul><li>Esistono due tipi di servizio: </li></ul><ul><li>Locale </li></ul><ul><li>Remot...
I Servizi – La Ricetta <ul><li>Quattro sono i componenti chiave: </li></ul><ul><li>android.app.Service </li></ul><ul><li>a...
I Servizi – AIDL Interface <ul><li>AIDL : Android Interface Definition Language </li></ul><ul><li>Permette di definire l’i...
I Servizi – Pro e Contro per la condivisione funzionalità <ul><li>*IBinder è un interfaccia </li></ul>PRO CONTRO Performan...
I ContentProviders
I Content Providers – Che Cosa Sono? <ul><li>I Content Provider servono ad incapsulare dati e renderli disponibili alle ap...
I Content Providers – Cosa Permettono di Fare? <ul><li>Attraverso i Content providers è possibile: </li></ul><ul><li>Condi...
I Content Providers – La ricetta <ul><li>I componenti chiave: </li></ul><ul><li>Uri, UriMatcher </li></ul><ul><li>ContentR...
I Content Providers – Pro e Contro per la condivisione dati <ul><li>*IBinder è un interfaccia </li></ul>PRO CONTRO Molto F...
AC2DM
AC2DM – Cosa è? <ul><li>A ndroid  C loud to  D evice  M essaging  F ramework </li></ul><ul><li>Permette l’invio di messagg...
AC2DM – Le possibilità del servizio <ul><li>Veicolare una richiesta differente per ogni dispositivo </li></ul><ul><li>Invi...
AC2DM – La ricetta <ul><li>Un Server ( che supporti chiamate HTTPS ) </li></ul><ul><li>Una Web App </li></ul><ul><li>Un ac...
AC2DM – La ricetta <ul><li>Un Server ( che supporti chiamate HTTPS ) </li></ul><ul><li>Una Web App </li></ul><ul><li>Un ac...
AC2DM – Il funzionamento – La Registrazione Start Applicazione Broadcast Richiesta Registration_id Google Receiver Google ...
AC2DM – Il funzionamento – L’invio Dati <ul><li>Il Server effettua una richiesta in POST a  https://android.apis.google.co...
AC2DM – Il funzionamento – L’invio dei Dati 2 Google  Servers Server Send msg ? Ok!  GTALK Conversione A Intent
AC2DM – Il funzionamento – La ricezione <ul><li>Una volta che google invia il messaggio al cellulare, l’applicazione verrà...
AC2DM – Possibili Scenari <ul><li>Esempi: </li></ul><ul><li>Localizzazione Real-time </li></ul><ul><li>Sync impostazioni W...
AC2DM – Pro e Contro per la condivisione dati <ul><li>*IBinder è un interfaccia </li></ul>PRO CONTRO Free Integrazione su ...
AB – E questo è tutto gente
Upcoming SlideShare
Loading in …5
×

Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

2,201 views

Published on

La presentazione di Andrea Baccega e Dario Lipari
in occasione del Codemotion, Roma 5 marzo 2011 http://www.codemotion.it

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,201
On SlideShare
0
From Embeds
0
Number of Embeds
134
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Processo: Tranne che diversamente specificato infatti il Service non viene eseguito su un differente processo dall’applicazione chiamante Thread: Il Service, come componente, non deve essere utilizzato come un Thread per evitare un ANR. ( domanda. Chi sa dirmi cos’è ANR? ) Tempo : 40sec
  • Locale: Update Meteo ogni ora Remoto: Player Musicale Android Tempo minore 3:37
  • Service: - Classe rappresentante il servizio vero e proprio ServiceConnection: - Interfaccia per monitorare lo stato di un service. Attraverso i suoi callbacks onServiceConnected e ..Disconnected abbiamo la possibilità di sapere quando possiamo interagire con il service remoto &lt;service&gt;: Possibilità di specificare: Service su differente processo Permission: Per farlo partire e quindi permettere di bindarsi. Binder: - Classe Base per effettuare RPC ( Remote Procedure Calls ) . La maggior parte degli sviluppatori non estenderà questa casse direttamente ma utilizzerà il tool aidl del pacchetto sdk android
  • Service: - Classe rappresentante il servizio vero e proprio ServiceConnection: - Interfaccia per monitorare lo stato di un service. Attraverso i suoi callbacks onServiceConnected e ..Disconnected abbiamo la possibilità di sapere quando possiamo interagire con il service remoto Binder: - Classe Base per effettuare RPC ( Remote Procedure Calls ) . La maggior parte degli sviluppatori non estenderà questa casse direttamente ma utilizzerà il tool aidl del pacchetto sdk android
  • PRO - Low level poichè si ha maggiore controllo sul flusso dati e sulla connessione CONTRO - Pochi scenari: non adatto a lavorare
  • Scrivere - Aggiornamento dati - Inserimento Dati Notifiche - Applicazioni Esterne possono registrarsi per una notifica. - Polling vs Push
  • Uri e UriMatcher: - Ogni ContentProvider risponde ad alcuni URI specificati nel tag provider - Uri identifica l’uri della richiesta - UriMatcher possiamo smistare tale richiesta ContentResolver: - Permette alle applicazioni di accedere ai content providers - Si occupa di risolvere la richiesta - E direzionarla nel provider giusto ( se esiste ) TAG - Struttura uri - Authority ( anche piu di una ) - Permissions - Lettura - Scrittura Cursor: - Classe base quando si lavora con DB - Cursore browsing righe DB
  • E’ possibile inviare anche lo stesso messaggio a differenti utenti Nei 1024 bytes è compreso un overhead Viene utilizzata la stessa connessione di gtalk 
  • E’ necessaria una web app che permetta di fare lo storing degli utenti ai quali mandare la notifica Per inviare messaggi tramite ac2dm è necessario form + abilitazione
  • E’ necessaria una web app che permetta di fare lo storing degli utenti ai quali mandare la notifica Per inviare messaggi tramite ac2dm è necessario form + abilitazione
  • Reg_id : sapete gia Data.&lt;*&gt; serve per mandare il valore di key Delay_while_idle se incluso indica che il messaggio può aspettare il risveglio del telefono Collapse_key serve per raggruppare piu messaggi sotto un certo gruppo. Se il telefono è in idle e piu messaggi dello stesso gruppo devono essere recapitati, in realtà solamente uno per gruppo arriverà al terminale La richiesta deve essere autentificata
  • E’ necessaria una web app che permetta di fare lo storing degli utenti ai quali mandare la notifica Per inviare messaggi tramite ac2dm è necessario form + abilitazione
  • Broadcast spiegati da dario nella prima parte del talk.
  • Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni

    1. 1. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    2. 2. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Andrea Baccega Founder DroidTech.it Co-Founder Androidiani.com @veke87 [email_address]
    3. 3. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Dario Lipari Android Apps: Modus Operandi, Swapper for root user Manteiner Hobbybrew – http://hobbybrew.kenai.com @azatoth77 [email_address]
    4. 4. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni <ul><li>Un'applicazione modulare è un'applicazione che prevede più componenti: </li></ul><ul><li>Un ”Core” </li></ul><ul><li>Più ”Plug-in” </li></ul><ul><li>Ognuna di queste componenti è un package differente. </li></ul>
    5. 5. <ul><li>Android dispone di classi native per la comunicazione tra applicazioni diverse e componenti della stessa applicazione: </li></ul><ul><li>Intent e BroadcastReceiver </li></ul><ul><li>Service e ContentProvider </li></ul>Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    6. 6. <ul><li>Un Intent è semplicemente l'esplicitazione di un'intenzione </li></ul><ul><li>Vorrei avviare un'applicazione </li></ul><ul><li>Vorrei passare da un'Activity ad un'altra all'interno della stessa applicazione </li></ul><ul><li>Vorrei comunicare il cambiamento di stato di un parametro (es: notifica geolocalizzazione, cambio livello della batteria, ecc...) </li></ul>Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    7. 7. <ul><li>Permette di passare dati attraverso l'utilizzo della classe Bundle e all'implementazione di Parcelable e Serializable </li></ul><ul><li>Viene propagato grazie ad un metodo dell'oggetto Context: sendBroadcast() e tutti i suoi overload </li></ul><ul><li>E' possibile specificare una “action” generica oppure esplicitare a quale Activity o BroadcastReceiver verrà inviata </li></ul>Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    8. 8. Come trasportare i dati da chi lancia l'intent a chi li riceve? Grazie all'oggetto Bundle che è incapsulato all'interno della classe Intent. Bundle accetta in input una coppia Key-Value, dove Key è una stringa che rappresenta il nome del parametro e Value è un tipo nativo (String, int, float, ecc...) oppure un oggetto che implementa Serializable o Parceable. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    9. 9. Parcelable (interfaccia specifica Android) è più indicato se i dati non devono essere serializzati: infatti il modo in cui Parcelable salva e recupera i dati può cambiare ad ogni implementazione di Android e se l'oggetto Parcelable viene serializzato (file o db) potrebbe non poter essere più recuperabile. Serializable è meno performante, ma è indicato per la serializzazione. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    10. 10. L'oggetto Bundle è molto flessibile e permette di contenere i dati in ogni formato ;) E' possibile utilizzare anche un oggetto JSON che può essere incapsulato nell'oggetto Bundle in formato stringa. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    11. 11. Ecco il Manifest del BroadcastReceiver che riceve un intent: Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni <receiver android:name=”CheckReceiver”> <intent-filter> <action android:name=”org.azasoft.mo.intent.QUERY_CONDITION”/> </intent-filter> </receiver>
    12. 12. Ecco il codice che lancia un intent: Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni Intent intent = new Intent(“org.azasoft.mo.intent.QUERY_CONDITION”); intent.setPackage(“org.azasoft.plugin.batterylevel”); intent.putExtra(“json”, _CurrentConditions.get(ConditionIndex).get_bundle()); _context.sendOrderedBroadcast(intent, null, myBroadcastReceiver, null, Activity.RESULT_FIRST_USER, null, null);
    13. 13. Ecco il codice del BroadcastReceiver che riceve l'intent, ma sopratutto ne riceve i dati: Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni JSONObject json = new JSONObject(intent.getExtras().getString(“json”)); … setResultCode(Activity.RESULT_OK);
    14. 14. Un caso reale: Modus Operandi permette di configurare Android sulla base di situazioni, composte da condizioni da verificare e azioni da svolgere. E' un'applicazione modulare che utilizza Intent, BroadcastReceiver, AlarmManager, Thread e WakeLock per svolgere i suoi compiti. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    15. 15. AlarmManager è utilizzato come Scheduler: In questo modo ad intervalli regolari Modus Operandi può effettuare il controllo di tutte le Situazioni inserite lanciando un intent per ogni Condizione da verificare ed uno per ogni Azione da svolgere. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    16. 16. Un Thread specifico è lanciato dal BroadcastReceiver che riceve l'intent di AlarmManager per effettuare il controllo delle Situazioni ed il lancio delle Azioni associate. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    17. 17. Una Condizione, come un'Azione, è composta da un BroadcastReceiver e da un'Activity. Il BroadcastReceiver serve per verificare la Condizione, l'Activity serve per configurarla e passare al Core i dati che questo poi serializzerà su DB e li ripasserà al BroadcastReceiver per verificarne lo stato quando necessario. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    18. 18. Ci sono Condizioni da verificare? Start check Situazione Core lancia Intent per verificare la Condizione La condizione è verificata? Fine Situazione Core lancia un intent per ogni Azione da eseguire Passo alla condizione seguente False False True True Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    19. 19. Tips E' possibile usare PackageManager per verificare che il plugin che si sta chiamando è davvero installato oppure no. Questo evita eventuali problemi legati ad una disinstallazione successiva di qualche plugin. Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
    20. 20. I Servizi
    21. 21. I Servizi – Che Cosa sono? <ul><li>Il Servizio è un componente dell’applicazione utilizzato per eseguire un’operazione di maggiore durata ed è utilizzzato per la fornitura di funzionalità con altre applicazioni </li></ul>
    22. 22. I Servizi – Cosa Non sono? <ul><li>Il Service NON è: </li></ul><ul><ul><li>Un processo separato </li></ul></ul><ul><ul><li>Un Thread </li></ul></ul>
    23. 23. I Servizi – I Due Tipi di Servizio <ul><li>Esistono due tipi di servizio: </li></ul><ul><li>Locale </li></ul><ul><li>Remoto </li></ul><ul><li>Noi tratteremo solamente il Remoto! </li></ul>
    24. 24. I Servizi – La Ricetta <ul><li>Quattro sono i componenti chiave: </li></ul><ul><li>android.app.Service </li></ul><ul><li>android.content.ServiceConnection </li></ul><ul><li>Tag <service> sull’Android Manifest </li></ul><ul><li>Android.os.Binder </li></ul>
    25. 25. I Servizi – AIDL Interface <ul><li>AIDL : Android Interface Definition Language </li></ul><ul><li>Permette di definire l’interfaccia che condivideranno il client e il service tramite un linguaggio molto vicino al JAVA. </li></ul><ul><li>*IBinder è un interfaccia </li></ul>
    26. 26. I Servizi – Pro e Contro per la condivisione funzionalità <ul><li>*IBinder è un interfaccia </li></ul>PRO CONTRO Performante Adatto a pochi scenari Low Level * Necessità di gestire la connessione remota
    27. 27. I ContentProviders
    28. 28. I Content Providers – Che Cosa Sono? <ul><li>I Content Provider servono ad incapsulare dati e renderli disponibili alle applicazioni tramite l’interfaccia ContentResolver. </li></ul><ul><li>Di solito i ContentProviders vengono costruiti sopra un Database. </li></ul>
    29. 29. I Content Providers – Cosa Permettono di Fare? <ul><li>Attraverso i Content providers è possibile: </li></ul><ul><li>Condividere dati tra applicazioni </li></ul><ul><li>Leggere dati </li></ul><ul><li>Scrivere dati </li></ul><ul><li>Notificare cambiamenti sui dati </li></ul>
    30. 30. I Content Providers – La ricetta <ul><li>I componenti chiave: </li></ul><ul><li>Uri, UriMatcher </li></ul><ul><li>ContentResolver </li></ul><ul><li>Tag <provider> sull’Android Manifest </li></ul><ul><li>Cursor </li></ul>
    31. 31. I Content Providers – Pro e Contro per la condivisione dati <ul><li>*IBinder è un interfaccia </li></ul>PRO CONTRO Molto Facile da implementare Non più facile se Datastore != SQLite Notifiche Push Sistema a Uri Gestione nativo delle permissions
    32. 32. AC2DM
    33. 33. AC2DM – Cosa è? <ul><li>A ndroid C loud to D evice M essaging F ramework </li></ul><ul><li>Permette l’invio di messaggi leggeri dal proprio server alle proprie applicazioni Android. </li></ul><ul><li>Non è disegnato per inviare grande mole dati bensi per notificare l’esistenza di nuovi dati </li></ul>
    34. 34. AC2DM – Le possibilità del servizio <ul><li>Veicolare una richiesta differente per ogni dispositivo </li></ul><ul><li>Inviare informazioni fino a 1024bytes </li></ul><ul><li>Consumi di batteria veramente ridotti </li></ul><ul><li>Real Time notifications </li></ul><ul><li>Zero Costi – Si! E’ gratuito  </li></ul>
    35. 35. AC2DM – La ricetta <ul><li>Un Server ( che supporti chiamate HTTPS ) </li></ul><ul><li>Una Web App </li></ul><ul><li>Un account Google abilitato </li></ul><ul><li>Piccole Modifiche all’app </li></ul>
    36. 36. AC2DM – La ricetta <ul><li>Un Server ( che supporti chiamate HTTPS ) </li></ul><ul><li>Una Web App </li></ul><ul><li>Un account Google abilitato </li></ul><ul><li>Piccole Modifiche all’app </li></ul>
    37. 37. AC2DM – Il funzionamento – La Registrazione Start Applicazione Broadcast Richiesta Registration_id Google Receiver Google Servers Registration_id Applicazione Primo Avvio Registration Receiver Sender Web App
    38. 38. AC2DM – Il funzionamento – L’invio Dati <ul><li>Il Server effettua una richiesta in POST a https://android.apis.google.com/c2dm/send con le seguenti chiavi (ad Es): </li></ul>Chiave Valore registration_id xxxxxxxxx collapse_key nuovo_utente data.nome Mario Rossi data.email [email_address] delay_while_idle x
    39. 39. AC2DM – Il funzionamento – L’invio dei Dati 2 Google Servers Server Send msg ? Ok!  GTALK Conversione A Intent
    40. 40. AC2DM – Il funzionamento – La ricezione <ul><li>Una volta che google invia il messaggio al cellulare, l’applicazione verrà svegliata da un intent in broadcast contenente i seguenti campi extra </li></ul>Chiave Valore nome Mario Rossi email [email_address]
    41. 41. AC2DM – Possibili Scenari <ul><li>Esempi: </li></ul><ul><li>Localizzazione Real-time </li></ul><ul><li>Sync impostazioni WebApp+Android App Real-Time </li></ul><ul><li>Notifiche Real Time </li></ul><ul><li>+ ∞ </li></ul>
    42. 42. AC2DM – Pro e Contro per la condivisione dati <ul><li>*IBinder è un interfaccia </li></ul>PRO CONTRO Free Integrazione su più fronti Veloce Multi Livello
    43. 43. AB – E questo è tutto gente

    ×