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.
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
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
@Budius Ihr Kommentar ist die Antwort, die ich will, danke. –