2012-09-04 7 views
22

Secondo i documenti Android Il nome extra Intent deve avere un prefisso del pacchetto. Ho usato Intent nomi extra senza prefissi per molto tempo e sembra che non ci siano possibilità di collisione poiché ciò che conta davvero è l'azione Intent che è unica. Quindi i documenti hanno torto o mi manca qualcosa?Perché i documenti Android dicono che gli intenti extra hanno bisogno del prefisso del pacchetto

la documentazione per putExtra dicono:

Aggiungi dati estesi per l'intento. Il nome deve includere un prefisso del pacchetto, ad esempio l'app com.android.contacts utilizzerà nomi come "com.android.contacts.ShowAll".

risposta

17

Credo che i documenti di Android raccomandino l'utilizzo di extra qualificati per gestire un caso di edge non comune. Il caso limite è quando si è:

  • Scrivendo un'attività che può essere avviato utilizzando un'azione pubblica intenti come Intent.ACTION_VIEW

E

  • Per i propri scopi vuoi essere in grado di passare extra personalizzati all'attività descritta sopra senza interferire con un'altra attività che sta facendo esattamente la stessa cosa e potrebbe avere degli extra con lo stesso nome ma diversi significati o formato

Phew, sembra tutto molto improbabile. Se non gestisci azioni di Intent pubbliche, sembra che non ci sia bisogno di qualificare pienamente i tuoi extra, ma immagino che non sia male fare tutto il tempo se sei un tipo paranoico.

+1

Non potresti fornire semplicemente il pacchetto come extra? In casi come questi sembra che sia meglio controllare prima il pacchetto di origine e poi gestire gli extra in base a ciò, a meno che alcune delle tue attività di invio possano aggiungere extra con il significato di altre attività di invio (il che potrebbe risultare molto confuso, ma potrebbe essere utile se stai impostando una sorta di attività o servizio proxy che manipola gli extra degli Intenti che passa avanti). – JAB

+0

Sono d'accordo con @JAB. L'impostazione predefinita non è che non si gestiscono i dati di intenti "extra" in modo diverso in base al richiedente, ma se si dovesse farlo, è necessario fornire un nome pacchetto come intento "extra" aggiuntivo dati in modo da poter facilmente distinguere ** e ** validare? –

+0

Potresti fornire e richiedere il nome del tuo pacchetto come un altro extra e questo manterrebbe la tua app sicura, ma le altre app non controllerebbero questo extra non standard. Pertanto, se utilizzi un'azione di pubblica intenzione e non completi tutti i nomi extra non standard, potresti rompere altre app. – satur9nine

2

Gli intenti possono essere passati ad altre app e al sistema stesso, quindi è necessario utilizzare uno spazio dei nomi del pacchetto.

+5

Non vedo perché sarebbe cortese. Perché il sistema o altre app guardano i miei extra, non dovrebbero passarli alla cieca? In secondo luogo, l'azione contiene il nome del pacchetto, perché ogni singolo extra ne ha bisogno? – satur9nine

Problemi correlati