Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically register/unregister a broadcast receiver in android

I want to dynamically register and unregister my receiver class with the broadcast: "android.net.wifi.STATE_CHANGE" This works very well if I do this in the manifest. But this makes it static. I want to do it dynamically in the activity class. What is its correspondent command in the activity class?

This is what my code is... and I am getting a problem because of registering and unregistering(multiple times) my receiver(which is starting a service).

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;
        }
    }
}
like image 250
Sid Avatar asked Nov 23 '11 11:11

Sid


People also ask

Where do I register and unregister broadcast receiver?

Where do I register and unregister broadcast receiver? Receiver can be registered via the Android manifest file. You can also register and unregister a receiver at runtime via the Context. registerReceiver() and Context.

When register unregister broadcast receivers created in activity?

You should register and unregister your broadcast in onResume() and onPause() methods. if you register in onStart() and unregister it in onStop(). that time you will get following issue. if your device screen is lock that time onStop() is called and if you unlock that time onStart() is never called.

Do we need to unregister broadcast receiver?

content. BroadcastReceiver) . Be sure to unregister the receiver when you no longer need it or the context is no longer valid.

Which of the following methods Register broadcast receiver dynamically?

There are two different methods to register a broadcast receiver. Statically (manifest-declared) - This receiver can be registered via the AndroidManifest. xml file. Dynamically (context-registered) - This registers a receiver dynamically via the Context.


1 Answers

Don't add dynamic broadcast receiver in onReceive on broadcast file. Add it on first activity or main activity of your application. If you needed it only when your application is open. But if you need it always received response just added it on manifest file

Register dynamic broadcast receiver on main activity

MyReceiver reciver;

@Override
protected void onResume() {
    super.onResume();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
    intentFilter.addAction("android.net.wifi.STATE_CHANGE");
    reciver = new MyReceiver();
    registerReceiver(reciver, intentFilter);
}

Unregister that broadcast receiver on activity stop or closed

@Override
protected void onStop() {
    super.onStop();
    unregisterReceiver(reciver);
}
like image 197
AXN Unicode Technologies Avatar answered Oct 18 '22 20:10

AXN Unicode Technologies