Programmatically register a broadcast receiver

后端 未结 10 1632
[愿得一人]
[愿得一人] 2020-11-22 05:00

I\'d like to know what is the best practice/way of programmatically register a broadcast receiver. I want to register specific receivers according to user choice.

As

相关标签:
10条回答
  • 2020-11-22 05:10

    In your onCreate method you can register a receiver like this:

    private BroadcastReceiver receiver;
    
    @Override
    public void onCreate(Bundle savedInstanceState){
    
      // your oncreate code should be
    
      IntentFilter filter = new IntentFilter();
      filter.addAction("SOME_ACTION");
      filter.addAction("SOME_OTHER_ACTION");
    
      receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          //do something based on the intent's action
        }
      };
         registerReceiver(receiver, filter);
    }
    

    Remember to run this in the onDestroy method:

     @Override
     protected void onDestroy() {
      if (receiver != null) {
       unregisterReceiver(receiver);
       receiver = null;
      }
      super.onDestroy();
     }
    
    0 讨论(0)
  • 2020-11-22 05:11

    Create a broadcast receiver

    [BroadcastReceiver(Enabled = true, Exported = false)]

    public class BCReceiver : BroadcastReceiver
    {
    
        BCReceiver receiver;
    
        public override void OnReceive(Context context, Intent intent)
        {
            //Do something here
        }
    }
    

    From your activity add this code:

    LocalBroadcastManager.getInstance(ApplicationContext)
        .registerReceiver(receiver, filter);
    
    0 讨论(0)
  • 2020-11-22 05:12

    It is best practice to always supply the permission when registering the receiver, otherwise you will receive for any application that sends a matching intent. This can allow malicious apps to broadcast to your receiver.

    0 讨论(0)
  • 2020-11-22 05:15

    It sounds like you want to control whether components published in your manifest are active, not dynamically register a receiver (via Context.registerReceiver()) while running.

    If so, you can use PackageManager.setComponentEnabledSetting() to control whether these components are active:

    http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)

    Note if you are only interested in receiving a broadcast while you are running, it is better to use registerReceiver(). A receiver component is primarily useful for when you need to make sure your app is launched every time the broadcast is sent.

    0 讨论(0)
  • 2020-11-22 05:18

    for LocalBroadcastManager

       Intent intent = new Intent("any.action.string");
       LocalBroadcastManager.getInstance(context).
                                    sendBroadcast(intent);
    

    and register in onResume

    LocalBroadcastManager.getInstance(
                        ActivityName.this).registerReceiver(chatCountBroadcastReceiver, filter);
    

    and Unregister it onStop

    LocalBroadcastManager.getInstance(
                    ActivityName.this).unregisterReceiver(chatCountBroadcastReceiver);
    

    and recieve it ..

    mBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.e("mBroadcastReceiver", "onReceive");
            }
        };
    

    where IntentFilter is

     new IntentFilter("any.action.string")
    
    0 讨论(0)
  • 2020-11-22 05:20

    Define a broadcast receiver anywhere in Activity/Fragment like this:

    mReceiver = new BroadcastReceiver() {
     @Override
     public void onReceive(Context context, Intent intent) {
         Log.d(TAG," onRecieve"); //do something with intent
       }
     };
    

    Define IntentFilter in onCreate()

    mIntentFilter=new IntentFilter("action_name");
    

    Now register the BroadcastReciever in onResume() and Unregister it in onPause() [because there is no use of broadcast if the activity is paused].

    @Override
    protected void onResume() {
         super.onResume();
         registerReceiver(mReceiver, mIntentFilter);
    }
    
    @Override
    protected void onPause() {
        if(mReceiver != null) {
                unregisterReceiver(mReceiver);
                mReceiver = null;
        }
        super.onPause();
    }
    

    For detail tutorial, have a look at broadcast receiver-two ways to implement.

    0 讨论(0)
提交回复
热议问题