2016-07-13 22 views
5

Non capisco se è necessario essere avvisati. Se fosse vero qualsiasi app potrebbe chiamare il mio ricevitore con quelle azioni? Quindi, se lo faccio falso, il sistema può inviare le azioni al mio ricevitore?Android: qual è il significato dell'attributo del destinatario esportato?

+0

Basta leggere la [documentazione ufficiale] (https://developer.android.com/guide/topics/manifest/receiver-element.html) – dipdipdip

+0

ad esempio: "Indipendentemente dal fatto che il destinatario della trasmissione possa ricevere messaggi da fonti esterne la sua applicazione ".... cosa significa fuori? Coinvolge anche il sistema? – user3290180

risposta

11

Non capisco se è necessario essere avvisati. Se fosse vero, qualsiasi app potrebbe chiamare il mio ricevitore con quelle azioni? Quindi se faccio il falso il sistema può inviare le azioni al mio ricevitore?

In realtà, altre app non possono "chiamare il destinatario". Altre app possono semplicemente trasmettere broadcast Intent s. Il sistema chiamerà quindi tutti i ricevitori registrati.

In generale non dovresti preoccuparti di questo. La maggior parte di questi trasmessi Intent s sono protetti in modo che solo le app di sistema possano trasmetterli comunque. Un tentativo da parte di un'altra app di trasmettere BOOT_COMPLETED, ad esempio, verrebbe semplicemente ignorato. Che cosa accadrebbe se il tuo BroadcastReceiver viene attivato da un'app canaglia perché trasmette CONNECTIVITY_CHANGE? Probabilmente nulla, perché la tua app dovrebbe verificare lo stato reale di connettività in onReceive() in ogni caso, e se non ci sono cambiamenti puoi semplicemente ignorarlo.

Inoltre, non è necessario specificare android:enabled="true" perché questo è lo stato predefinito. Non è inoltre necessario specificare android:exported="true" perché è stato aggiunto un <intent-filter> allo <receiver> che imposta automaticamente android:exported in true.

2

se si imposta android: exported = "false", implica che il destinatario è destinato solo per l'uso interno dell'applicazione.

Nota: questo attributo non è l'unico modo per limitare l'esposizione esterna del ricevitore di una trasmissione. È inoltre possibile utilizzare un'autorizzazione per limitare le entità esterne che possono inviarlo messaggi

+1

Questo è sbagliato. Se imposti 'android: exported =" true "', il destinatario è pubblico, non interno all'applicazione. Poiché esiste un '' presente nella dichiarazione , 'android: exported =" true "' è ridondante perché l'impostazione predefinita è 'true' se è presente un' '. Se si desidera limitare questo ricevitore a solo applicazione, è necessario impostare in modo esplicito 'android: exported =" false "'. –

+1

@DavidWasser scusa il mio errore, ho modificato la mia risposta, grazie per aver notato – SaravInfern

Problemi correlati