How to unregister BroadcastReceiver

后端 未结 3 771
我在风中等你
我在风中等你 2020-11-27 04:51

My app uses a BroadcastReceiver to get sms in this way:

SmsBR.java

public class SmsBR extends BroadcastReceiver {

    @Override
            


        
相关标签:
3条回答
  • 2020-11-27 05:21

    Edit:

    For an Activity:

    In order to register your broadcast receiver from within your app, first, remove the <receiver> tag from your AndroidManifest.xml file. Then, call registerReceiver(BroadcastReceiver receiver, IntentFilter filter) in your onResume(). Use unregisterReceiver(BroadcastReceiver receiver) in your onPause() to unregister the Broadcast receiver.

    For a Service:

    Remove the receiver tag from the manifest file. You can then register your Broadcast receiver with the same method in the onCreate() and unregister in the onDestroy().

    EDIT: Sample Code:

    public class MyActivity extends Activity {
      private final BroadcastReceiver mybroadcast = new SmsBR();
    
      public void onResume() {
        super.onResume();
    
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(mybroadcast, filter);
      }
    
      public void onPause() {
        super.onPause();
    
        unregisterReceiver(mybroadcast);
      }
    }
    
    0 讨论(0)
  • 2020-11-27 05:40

    onDestroy() is not guaranteed to be called. When you start Activity from Activty, onPause() and onStop() method called instead of onDestroy().

    onDestroy() calls when you hit back button or call finish() method.

    Hence, broadcast receiver should be registered in onStart() or onResume(), and unregister receiver in onPause() or onStop().

    If you unregister receiver in onDestroy() method, it might cause a memory leak in App.

    0 讨论(0)
  • 2020-11-27 05:43

    First remove receiver tag from manifest, then: for service :

    @Override
    public void onCreate() {
    
    
        myReceiver = new SmsBR();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.SMS_RECEIVED");// add any actions you want
        registerReceiver(myReceiver , filter);
    
     }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (myReceiver != null)
            unregisterReceiver(myReceiver);
    }
    

    for Activity:

    public class MyActivity extends Activity {
      private final BroadcastReceiver mybroadcast = new SmsBR();
    
      public void onResume() {
        super.onResume();
    
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(mybroadcast, filter);
      }
    
      public void onPause() {
        super.onPause();
    
        if (mybroadcast!= null)
           unregisterReceiver(mybroadcast);
      }
    }
    
    0 讨论(0)
提交回复
热议问题