Search code examples
androidandroid-intentbroadcastreceiverintentfilter

Unable to receive Broadcast In Same Activity


So i was learning about BroadcastReceiver in android. BroadcastReceivers are based on observer design patterns (which makes them very interesting).
So what i am trying to achieve is to broadcast my message and inside same activity i want to receive the message (Just for testing purpose). Here is the code snippet

    Log.d("ABC", "sending");
    Intent intent = new Intent("com.yourcompany.testIntent");
    intent.putExtra("value", "test");
    sendBroadcast(intent);



    Log.d("ABC", "sent");

    IntentFilter filter = new IntentFilter("com.yourcompany.testIntent");
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("ABC","INSIDE ");
            String value =  intent.getExtras().getString("value");
        }
    };

    Log.d("ABC", "receiving");
    registerReceiver(receiver, filter);
    Log.d("ABC", "received");

Here is the debugged output

04-06 20:40:52.446 20149-20149/com.example.illuminati.broadcastreceiver D/ABC: sending 04-06 20:40:52.447 20149-20149/com.example.illuminati.broadcastreceiver D/ABC: sent 04-06 20:40:52.448 20149-20149/com.example.illuminati.broadcastreceiver D/ABC: receiving 04-06 20:40:52.453 20149-20149/com.example.illuminati.broadcastreceiver D/ABC:received

Why it is not getting inside onReceive() method
What am i missing here
Any help?


Solution

  • You are sending your broadcast message before registering broadcast receiver. Try doing in the following way and it will work:

    IntentFilter filter = new IntentFilter("com.yourcompany.testIntent");
        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d("ABC", "INSIDE ");
                String value = intent.getExtras().getString("value");
            }
        };
        registerReceiver(receiver, filter);
        Intent intent = new Intent("com.yourcompany.testIntent");
        intent.putExtra("value", "test");
        sendBroadcast(intent);