2016-07-26 6 views
2

Ich habe ein BroadcastReceiver in meiner app definiert ist, und es wurde in AndroidManifest.xml wie unten definiert:Wie die `BroadcastReceiver` Instanz erhalten, die in` AndroidManifest.xml`

<receiver android:name=".receiver.MyTaskReceiver"> 
    <intent-filter> 
     <action android:name="xxx.xxx.xxx" /> 
    </intent-filter> 
</receiver> 

Dies ist der MyTaskReceiver Code:

public class MyTaskReceiver extends BroadcastReceiver { 

    private ReceiverListener listener ; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //do general things 

     if(listener != null) { 
      listener.received(); //do special things if the listener is setted up. 
     } 
    } 

    public void setListener(ReceiverListener listener) { 
     this.listener = listener; 
    } 

    public interface ReceiverListener { 
     void received(); 
    } 

} 

wenn der Empfänger eine Absicht habe, werde ich zunächst einige allgemeine Dinge tun, wie Daten speichern ...

Aber wenn die angegebene Aktivität i s dem Benutzer angezeigt wird, muss ich die Ansichten der Aktivität ändern, also verwende ich die ReceiverListener, um dies zu tun. Setzen Sie einen Listener auf MyTaskReceiver in onCreate und setzen Sie null in onDestroy.

Dann kommt hier ein Problem, wie kann ich die Instanz der MyTaskReceiver bekommen, so dass ich einen Listener darauf setzen kann?

Oder gibt es andere Möglichkeiten zu erreichen, was ich will?

Danke.

+0

Sie brauchen nicht den Verweis auf einen Empfänger, wenn es in Manifest-Datei definiert ist. Behandeln Sie die Absicht in Ihrer BroadcastReceiver-Klasse. – Talha

+1

Leider funktionieren Receiver nicht so. Die Instanz wird erstellt, die "Absicht" wird an "onReceived" geliefert und dann zerstört. Sie können den Listener nicht registrieren. Schaut euch @Natalia an. Das scheint das zu sein, wonach du suchst. – Budius

+0

@Budius Ihr Kommentar ist die Antwort, die ich will, danke. –

Antwort

4

Sie können Empfänger in Ihrer Tätigkeit wie folgt registrieren:

private void registerBroadcastReceiver() { 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(xxx.xxx.xxx); 
    registerReceiver(this.broadcastReceiver, intentFilter); 
} 

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle extras = intent.getExtras(); 
     //do whatever need to be done 
    } 
}; 

Hoffe, es hilft! :)

Und denken Sie daran Ihre Empfänger deregistrieren (zum Beispiel in onDestroy())

unregisterReceiver(this.broadcastReceiver); 
+1

Ich weiß, ich kann BroadcastReceiver in einer Aktivität registrieren, aber mein Empfänger ist nicht auf eine spezielle Aktivität angewiesen, ich brauche es funktioniert, wenn die App läuft keine Aktivität läuft. Und trotzdem danke :) –

Verwandte Themen