Domanda

Se registro un ricevitore di trasmissione dire nella mia attività come questa,

@Override
protected void onResume() {
    super.onResume();

    myReceiver = new BroadcastReceiver() { ... };
    IntentFilter filter = new IntentFilter("com.example.MY_ACTION");
    registerReceiver(myReceiver, filter);
}
.

Questo ricevitore ha esportato?Se un'altra app trasmessa com.example.MY_ACTION, verrà ricevuto da myReceiver?

Se lo è, presumo di aver bisogno di usare la forma di registerReceiver() che accetta un permesso di stringa, quindi definisce quell'autorizzazione nel mio manifest, dandola un livello di protezione elevato (come la firma).È corretto?C'è un modo più semplice?

Grazie.

È stato utile?

Soluzione

Dal Documenti API sull'API BroadcaStreceiver:

.

Se non è necessario inviare trasmissioni su applicazioni, considerare Usando questa classe con localbroadcastmanager invece di più Servizi generali descritti di seguito.Questo ti darà molto di più implementazione efficiente (nessuna comunicazione cross-process necessaria) e Consentivi di evitare di pensare a qualsiasi problema di sicurezza relativo ad altri Le applicazioni sono in grado di ricevere o inviare le trasmissioni.

In questo modo almeno è possibile mantenere il ricevitore solo all'interno dell'applicazione.

Altri suggerimenti

Per risparmiare gli altri il lavoro e per i miei scopi di archiviazione: Sì, i ricevitori registrati contestuali sono esportati per impostazione predefinita.

Non sembra essere molto Documentazione Ma tu può convalidare questo rapidamente eseguendo un'app separata inviando una trasmissione personalizzata. Ho testato questo su API 16-29, la trasmissione verrà ricevuta e quindi ogni pacchetto sarà in grado di inviare al tuo ricevitore (che può essere un difetto di sicurezza).


.

Per risolvere il problema senza utilizzare le trasmissioni locali ( dovrebbe essere usato ovunque possibile ) sei sulla strada giusta nella definizione di un'autorizzazione personalizzata e Restringere le trasmissioni alle app che hanno richiesto quell'autorizzazione . Per il bene di completezza:

Definisci e usa un'autorizzazione personalizzata nel manifest:

<permission android:name="com.example.bcrtest.BROADCAST_PERMISSION"
    android:protectionLevel="signature"/>
<uses-permission android:name="com.example.bcrtest.BROADCAST_PERMISSION" />
.

Registrare il ricevitore con il permesso:

registerReceiver(mReceiver, new IntentFilter(MY_INTENT_ACTION), "com.example.bcrtest.BROADCAST_PERMISSION", null );
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top