Search code examples
androidandroid-activityserviceandroid-contextlocalbroadcastmanager

LocalBroadcastManager not receiving broadcasts in a Activity


I am using a LocalBroadcastManager to make broadcast to my activtiy and services using APPLICATION CONTEXT , like this:

public class CommonForApp extends Application{
    public void broadcastUpdateUICommand(String[] updateFlags,
                String[] flagValues) {
            Intent intent = new Intent(UPDATE_UI_BROADCAST);
            for (int i = 0; i < updateFlags.length; i++) {
                intent.putExtra(updateFlags[i], flagValues[i]);
            }

            mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
            mLocalBroadcastManager.sendBroadcast(intent);

        }}

Now Using a Listener in my Service, I am calling broadcastUpdateUICommand() ,like this:

public class mService extends Service {
    public BuildNowPLaylistListListener buildCursorListener = new BuildNowPLaylistListListener() {

            @Override
            public void onServiceListReady() {
    mApp.broadcastUpdateUICommand(
                        new String[] { CommonForApp.INIT_DRAWER},
                        new String[] {""});

            }}}

And i am receiving the broadcast in my Activity, like this:

public class mActivity extends Activity{
    BroadcastReceiver mReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
           mtoast.showtext("in onreceive"); //toast to check 

                if (intent.hasExtra(CommonForApp.INIT_DRAWER))
                    initialiseDrawer();

    }};


}

mApp is instance of Application. CommonForApp is my Application Class.

But in my activity i am not receving any broadcast(the broadcast manager is initialised using application context) .

Can Anyone suggest me why i am not receiving broadcast in my activity? ..

.Thanks in advance !


Solution

  • in activity:

    protected BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, final Intent intent) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if(intent.hasExtra("type")){
                        // Do some action
                    }
                }
            });
    
        }
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
                new IntentFilter("data-loaded"));
    }
    
    protected void onDestroy() {
        super.onDestroy();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
    }
    

    then you send broadcast:

    public static void sendBroadcastMessageDataLoaded(Context context, String dataType){
        Intent intent = new Intent("data-loaded");
        intent.putExtra("type", dataType);
        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
    }