2012-02-01 11 views

risposta

7

È un contesto di applicazione.

public abstract void onReceive (Context context, Intent intent) 
+11

Può essere un contesto applicazione, ma è una versione limitata di tale contesto. Nel codice sorgente Android per 'Contesto' si parla di' ReceiverRestrictedContext' e questo Contesto non consente certe operazioni come 'registerReceiver()' e 'bindService()'. Se hai davvero bisogno di un contesto applicativo in 'onReceive()', allora devi chiamare 'context.getApplicationContext()' –

+0

@ coder_For_Life22 Contesto di quale applicazione? L'applicazione che riceve la trasmissione o l'applicazione che invia la trasmissione? – Bhargav

0

È il contesto in cui è in esecuzione il ricevitore. Ad esempio, se il messaggio broadcast è da UsbManager, il contesto è il contesto di UsbManager.
Maggiori informazioni: BroadcastReceiver

+0

Questo non ha senso. È più probabile che il contesto sia il contesto in cui è stato registrato il destinatario, piuttosto che il contesto di chi * ha inviato * la trasmissione. Il tuo esempio con UsbManager suggerisce una trasmissione da un componente (di sistema) al di fuori della tua app; non avrebbe senso se il tuo ricevitore fosse invocato con il contesto di un'altra app ... – JHH

0

Storicamente, è un esempio di ReceiverRestrictedContext, ma questa classe è andato nelle recenti versioni di Android (non quale livello di API esattamente, ma non è presente in API 26 fonti), così ora, è dovrebbe essere il tuo contesto applicativo.

ReceiverRestrictedContext impedito di registrare un BroadcastReceiver da un BroadcastReceiver.

Poiché un'istanza di ReceiverRestrictedContext viene creato ogni volta che il BroadcastReceiver viene creata un'istanza, è necessario stare attenti di non passare a un componente che ha un ciclo di vita più lungo di quanto il tuo (molto breve durata) BroadcastReceiver, o si potrebbe creare perdite di memoria su questi versioni precedenti (non così tanto) di Android che hanno questo ReceiverRestrictedContext.

Si può tranquillamente chiamare getApplicationContext() e passare il suo risultato a un componente più longevo però.

Si noti che il fatto ReceiverRestrictedContext non è più disponibile nelle versioni Android recenti, non significa che è possibile creare un "BroadcastReceiverCeption"!

Problemi correlati