简体   繁体   中英

Using LocalBroadcastManager without Activity using another class

This doesn't work, I never receive messages in the receiver. I've been working for hours. What I'm trying to do is using LocalBroadcastManager without Activity using another AppContext class.

class 1

import android.content.Context;

public class AppContext extends Application {

    private static AppContext instance;

    public AppContext() {
        instance = this;
    }

    public static Context getContext() {
        return instance;
    }

}

class 2

@Override
public void onResume() {

    receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            //receive your message here

            String message = intent.getStringExtra("message");
            Log.d("receiver", "Got message: " + message);

            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();

        }

    };

    LocalBroadcastManager.getInstance(AppContext.getContext()).registerReceiver(receiver,
            new IntentFilter("custom-event-name"));

class3

                Log.d("sender", "Broadcasting message");
                Intent intent = new Intent("custom-event-name");
                // You can also include some extra data.
                intent.putExtra("message", "99999");
                LocalBroadcastManager.getInstance(AppContext.getContext()).sendBroadcast(intent);

I too had the same issue. Don't change anything in class3. I think its perfect. In class2, Create an inner class that extends BroadcastReceiver.

private class Class2Receiver extends BroadcastReceiver 
{
        @Override
        public void onReceive(Context context, Intent intent) 
{
            Class2.this.class2Refresh();
         }
    }

//class2Refresh(): receive your message here in thismethod

In class2, onResume() method, instantiate as below:

Class2 class2Rec=new Class2.Class2Receiver();
        LocalBroadcastManager.getInstance(getContext()).registerReceiver(class2Rec,new IntentFilter("custom-event-name"));
        class2Refresh();

Let me know if this helps out!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM