Sto cercando di capire come comunicare tra le applicazioni in Android, non solo tra le istanze Activity
.Sta usando Parcelable il modo giusto per inviare dati tra le applicazioni?
Ho impostato un "client" che invia un oggetto Messenger a un servizio (nello Intent
inviato al servizio); il servizio crea un obj Message
e lo invia di nuovo al "client" utilizzando messenger.send(message)
. Funziona bene finché non provo a usare Message.obj per tenere un oggetto.
Ho creato il mio codice Parcelable
classe MyParcelable
nel servizio e lo inserisco nel messaggio. Tutto funziona finché il messaggio non è riarmato nel 'client'. L'unmarshall fallisce perché il 'client' non ha accesso alla classe MyParcelable
. È ovvio: sono in pacchetti diversi (ad esempio com.whatever.myclient
e com.whatever.myserver
). Questo è completamente il modo sbagliato di fare questo?
Ho anche provato a creare un Parcel
e inviarlo (entrambe le applicazioni avrebbero quindi accesso alla classe) - ma Parcel
non è Parcelable
. Ho letto che i programmi di caricamento classi sono in uso ma non capisco come distaccare i caricatori di classe in applicazioni separate (processi, se capisco l'architettura di Android a tale riguardo). Cioè, come si può 'insegnare' un caricatore di classi su una classe che esiste nell'altro caricatore di classi? Sembra certamente che dovrebbe esserci un ovvio 'questo è come lo fai' ma non l'ho ancora visto.
Ehi m0skit0, dovresti espanderlo un po '. Stavo per rispondere, ma tu hai esattamente ragione. Un po 'più di spiegazione lo renderebbe più chiaro. I prodotti Parcelables funzionano solo se i ClassLoaders eseguono il marshalling e l'unmarshalling dei dati hanno copie identiche della classe Parcelable ... –
Suoni buoni ma non ho idea di come fare entrambi (a) includere MyParcelable in 2 diversi pkgs e farli vedere come lo stesso class o (2) include il giusto ClassLoader (da dove ottengo, ad esempio, il caricatore di classe giusto). Grazie per la tua risposta, ma hai circa 2 livelli di esperienza al di sopra della mia comprensione. –
Ho aggiornato la mia risposta. – m0skit0