Dynamisch register/unregister ein broadcast-receiver in android
Möchte ich dynamisch registrieren und deregistrieren mein receiver Klasse mit der Ausstrahlung:
"android.net.wifi.STATE_CHANGE"
Dies funktioniert sehr gut, wenn ich dies im manifest. Aber das macht es statisch. Ich möchte es dynamisch in der activity-Klasse. Was ist mit seinen Korrespondenten-Befehl in der activity-Klasse?
Dies ist, was mein code ist...
und ich bin immer ein problem, weil das registrieren und aufheben der Registrierung(mehrmals) mein receiver(welcher Dienst starten).
public class startScreen extends Activity {
/** Called when the activity is first created. */
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.example.MyService");
context.startService(serviceIntent);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.initial);
final IntentFilter filter = new IntentFilter();
filter.addAction("android.net.wifi.STATE_CHANGE");
Button button = (Button) findViewById(R.id.button1);
final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton1);
try {
...some code...
if (bool == true) {
toggleButton.setChecked(true);
this.registerReceiver(receiver, filter);
} else
toggleButton.setChecked(false);
} catch (Exception e) {
Log.e("Error", "Database", e);
} finally {
...
}
toggleButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if ((toggleButton.isChecked())) {
getBaseContext().registerReceiver(receiver, filter);
} else {
if (receiver != null) {
getBaseContext().unregisterReceiver(receiver);
receiver = null;
}
}
}
});
}
@Override
protected void onResume() {
super.onResume();
if (bool == true) {
if (receiver == null)
this.registerReceiver(receiver, filter);
}
}
@Override
protected void onPause() {
super.onPause();
if (receiver != null) {
this.unregisterReceiver(receiver);
receiver = null;
}
}
}
Check this - und dieser, ähnlich wie das, was Sie erreichen wollen. Hoffe, das hilft.
Siehe http://stackoverflow.com/questions/4794776/start-broadcastreceiver-from-activity
Was ist das "problem", dass Sie? Die besagt, dass Sie ein problem haben, ohne zu sagen, was es ist, ist selten hilfreich, um diejenigen, die versuchen, Ihre Frage zu beantworten. Sie bekommen eine Fehlermeldung? Was ist der genaue Wortlaut der Fehlermeldung und welche Zeile im code sind Sie zu bekommen?
Tut mir Leid, ich dint Staat das problem ich bin mit klar... sowieso, das problem ist das: ich habe gesehen, dass der 'Empfänger' variable wird NULL, nachdem Sie einmal ausgeführt registerReceiver und unregisterReceiver Befehle... speziell, nachdem ich registrieren und zu deregistrieren und dann wieder registrieren die Empfänger der Empfänger hat die NULL nur, und daher beim aufheben der Registrierung ist es wieder, gibt es einen Fehler! also im Grunde, meine app ist nicht in der Lage, registrieren Sie einen Receiver erneut ein, nachdem Sie die Registrierung einmal. warum ist das ein problem?
Siehe http://stackoverflow.com/questions/4794776/start-broadcastreceiver-from-activity
Was ist das "problem", dass Sie? Die besagt, dass Sie ein problem haben, ohne zu sagen, was es ist, ist selten hilfreich, um diejenigen, die versuchen, Ihre Frage zu beantworten. Sie bekommen eine Fehlermeldung? Was ist der genaue Wortlaut der Fehlermeldung und welche Zeile im code sind Sie zu bekommen?
Tut mir Leid, ich dint Staat das problem ich bin mit klar... sowieso, das problem ist das: ich habe gesehen, dass der 'Empfänger' variable wird NULL, nachdem Sie einmal ausgeführt registerReceiver und unregisterReceiver Befehle... speziell, nachdem ich registrieren und zu deregistrieren und dann wieder registrieren die Empfänger der Empfänger hat die NULL nur, und daher beim aufheben der Registrierung ist es wieder, gibt es einen Fehler! also im Grunde, meine app ist nicht in der Lage, registrieren Sie einen Receiver erneut ein, nachdem Sie die Registrierung einmal. warum ist das ein problem?
InformationsquelleAutor Sid | 2011-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den LocalBroadcastManager Klasse wird verwendet, um zu registrieren und senden Sie Sendungen von Intents, die auf lokale Objekte in Ihrem Prozess. Diese ist schneller und sicherer als Ihre Veranstaltungen nicht verlassen, Ihre Anwendung.
Folgende Beispiel zeigt eine Aktivität, die Register für einen Kunden-event namens " mein-event.
Sie sind herzlich willkommen
InformationsquelleAutor Jeba
verwenden Sie die unten Methoden zum registrieren/deregistrieren von Ihrem Empfänger:
Referenz haben Sie einen Blick auf diese
ich habe gesehen, dass der 'Empfänger' variable wird NULL, nach ein paar registerReceiver und unregisterReceiver Befehle... speziell, nachdem ich registrieren und zu deregistrieren und dann wieder registrieren die Empfänger der Empfänger hat die NULL nur, und daher beim aufheben der Registrierung ist es wieder, gibt es einen Fehler!
Ein BroadcastReceiver Objekt ist nur gültig für die Dauer der der Aufruf von onReceive(Context, Intent). Sobald Sie Ihren code gibt, die von dieser Funktion berücksichtigt das system das Objekt fertig zu sein und nicht mehr aktiv. Für dynamisch registrieren/deregistrieren von BroadcastReceivers, Sie haben sich daran zu erinnern, um die Registrierung der Instanz an Ihre Empfänger in onPause() registrieren, um Sie wieder in onResume(). Hier ist ein sample application
pls überprüfen meine Antwort... ich habe es als separate Antworten, weil ich konnte nicht den ganzen code hier rein... ich würde es überschreiten, das Wort Grenze hier...
InformationsquelleAutor Permita
Nicht das hinzufügen von dynamischen broadcast receiver in der onReceive auf broadcast-Datei. Fügen Sie es auf die erste Aktivität oder Haupttätigkeit der Anwendung. Wenn Sie es benötigt, nur wenn die Anwendung offen ist. Aber wenn Sie es brauchen immer Antwort erhalten, nur fügte hinzu, es auf der manifest-Datei
Registrieren dynamischen broadcast receiver auf Haupttätigkeit
Abmelden, broadcast-receiver auf Aktivität stoppen oder geschlossen
InformationsquelleAutor AXN Unicode Technologies
Vielleicht bin ich ein bisschen zu spät, aber das problem liegt an der Tatsache, dass Sie die Einstellung der
receiver = null
in IhremonPause
- Methode und dann die Einstellung nie wieder. Sie versuchen auch, sich zu registrieren es in IhremonResume
Methode aber nur, wenn esnull
, was keinen Sinn macht auch.Ändern Sie die Logik, wo Sie einstellen/testen der
null
Wert des Empfängers, anstatt verwenden Sie einfach einboolean
variable zu verfolgen, der den Empfänger-status (wenn es registriert ist oder nicht).InformationsquelleAutor Jorge Galvão
Kannst du ein bisschen erklären?
InformationsquelleAutor Nikhil Bhojani