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?

InformationsquelleAutor Sid | 2011-11-23

Schreibe einen Kommentar