CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 10 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 4 su 4
Discussione:

[TUTORIAL] Intent ad uno specifico broadcast receiver

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid L'avatar di Azatoth


    Registrato dal
    Apr 2009
    Località
    Misinto (MI)
    Messaggi
    568

    Ringraziamenti
    1
    Ringraziato 38 volte in 28 Posts
    Predefinito

    [TUTORIAL] Intent ad uno specifico broadcast receiver

    Ciao a tutti,

    nella mia ricerca di un metodo per fare un'applicazione a plugin, mi sono imbattuto in un dilemma.

    Premessa:

    1) "Applicazione a plugin" si intende un'apk che fa da core e più apk che fanno da plugin

    2) La comunicazione tra i plugin ed il core avviene tramite l'utilizzo di Intent e BroadcastReceiver

    3) il passaggio di dati è fatto tramite Bundle passati al Receiver tramite l'Intent.

    4) l'Intent che il Core 'lancia' è ovviamente registrato su tutti i receiver degli n ipotetici plugin

    Come fare per svolgere il compito al punto 4?

    Ipotesi 1:
    Il core lancia un intent per tutti i plugin indistintamente, quindi ogni plugin ha delle regole stringenti per rispondere solo se l'intent è per lui.

    Ipotesi 2:
    Il core lancia un intent specificatamente al plugin che sa di dover chiamare.

    E' ovviamente un problema di disegno architetturale e quindi legato a cosa effettivamente il core debba fare.
    Nel mio specifico caso l'ipotesi 2 è quella che mi permette di svolgere meglio il compito che è stato assegnato al core.

    Qui vedremo come lanciare un Intent ad uno specifico Package e come farlo ad uno specifico Broadcast Receiver di uno specifico Package:

    Per lanciare un intent ad uno specifico package è necessario usare le API versione 4 o superiore (quindi per android 1.6, minimo):

    Ecco il codice del core che lancia l'intent:



    Ovviamente il plugin è fatto in modo da avere un package "org.package.name" e deve avere nel manifest un receiver che risponda all'intent "org.packagename.intent.TEST".

    Ecco il codice del receiver:



    Ecco la riga del manifest del plugin per il receiver:



    se ci fossero anche 10 plugin che rispondono all'intent "org.packagename.intent.TEST", questo verrà ricevuto solo dal package "org.package.test".

    Per inviarlo ad uno specifico receiver di uno specifico package invece cambia solo un'istruzione nel codice del core (questo funziona anche con API di livello 3, quindi android 1.5):



    Ovviamente è necessario che il core sappia nome del package del plugin e nome del receiver.
    Per fare questo però è fondamentale che il core utilizzi la classe PackageManager oppure che esponga un content provider che il plugin possa usare per fornire il proprio nome e il proprio receiver al core.

    Verrà trattato prossimamente.

    Spero vi sia utile.


    Google Nexus One USA
    ROM: CyanogenMod 6.1.1 - Android 2.2.1
    Radio: 5.12.00.08
    Recovery: Clockwork

    Sviluppatore di: Swapper per utenti root | Modus Operandi

    Ecco le mie app Android

  2. Il seguente Utente ha ringraziato Azatoth per il post:

    essereumano (14-05-10)

  3.  
  4. #2
    Senior Droid


    Registrato dal
    Oct 2010
    Messaggi
    308

    Ringraziamenti
    4
    Ringraziato 20 volte in 11 Posts
    Predefinito

    Grazie per il tutorial !

    Anche se a mio avviso la soluzione piu' elegante e ragionevole (anche pensado a sviluppi futuri) era lanciare un intent in polling ed aspettare l'ack dei plugin connessi.

    Però vabè, de gustibus

  5. #3
    Administrator L'avatar di Andrea


    Registrato dal
    Nov 2008
    Messaggi
    3,368
    Smartphone
    Nexus S, myTouch Slide 4g

    Ringraziamenti
    143
    Ringraziato 880 volte in 323 Posts
    Predefinito

    Fico! :P Very Fico

    Twitter @veke87

  6. #4
    Senior Droid L'avatar di Azatoth


    Registrato dal
    Apr 2009
    Località
    Misinto (MI)
    Messaggi
    568

    Ringraziamenti
    1
    Ringraziato 38 volte in 28 Posts
    Predefinito

    Quote Originariamente inviato da Andrea Visualizza il messaggio
    Fico! :P Very Fico
    Bhe è quello che ho fatto in MO


    Google Nexus One USA
    ROM: CyanogenMod 6.1.1 - Android 2.2.1
    Radio: 5.12.00.08
    Recovery: Clockwork

    Sviluppatore di: Swapper per utenti root | Modus Operandi

    Ecco le mie app Android

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy