简体   繁体   English

如何在此代码中注销广播接收器?

[英]How do i unregister broadcast receiver in this code?

I have dynamically registered my broadcast receiver , now how do i unregister it . 我已经动态注册了我的广播接收器,现在如何注销它。 i have used unregisterReceiver(this). 我用过unregisterReceiver(this)。 but i dont think it works. 但我不认为这行得通。

 IntentFilter filter = new IntentFilter("SENT");

       //---when the SMS has been sent---
       registerReceiver(new BroadcastReceiver(){
           @Override
           public void onReceive(Context arg0, Intent arg1) {
               switch (getResultCode())
               {
                   case Activity.RESULT_OK:
                      Toast.makeText(getBaseContext(), "SMS sent waiting room", 
                               Toast.LENGTH_SHORT).show();
                      unregisterReceiver(this); 
                       break;
                   case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                       Toast.makeText(getBaseContext(), "Generic failure", 
                               Toast.LENGTH_SHORT).show();
                       break;
                   case SmsManager.RESULT_ERROR_NO_SERVICE:
                       Toast.makeText(getBaseContext(), "No service", 
                               Toast.LENGTH_SHORT).show();
                       break;
                   case SmsManager.RESULT_ERROR_NULL_PDU:
                       Toast.makeText(getBaseContext(), "Null PDU", 
                               Toast.LENGTH_SHORT).show();
                       break;
                   case SmsManager.RESULT_ERROR_RADIO_OFF:
                       Toast.makeText(getBaseContext(), "No Network Detected", 
                               Toast.LENGTH_SHORT).show();
                       break;
               }
           }
       }, filter);

You can use 您可以使用

unregisterReceiver(nameofyourbroadcastreceiver);

Sample Code 样例代码

public class MyActivity extends Activity
{
  private final BroadcastReceiver mybroadcast = new SomeBroadcastReceiver();

  public void onResume()
  {
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.provider.Telephony.SMS_RECEIVED");
    registerReceiver(mybroadcast, filter);  

  }

  public void onPause()
  {
    unregisterReceiver(mybroadcast);
  }
}

Your code: 您的代码:

IntentFilter filter = new IntentFilter("SENT");

BroadcastReceiver br =  new BroadcastReceiver() {

    @Override
    public void onReceive (Context context, Intent intent) {

        switch (getResultCode())
           {
               case Activity.RESULT_OK:
                  Toast.makeText(getBaseContext(), "SMS sent waiting room", 
                           Toast.LENGTH_SHORT).show();
                  unregisterReceiver(br); 
                   break;
               case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                   Toast.makeText(getBaseContext(), "Generic failure", 
                           Toast.LENGTH_SHORT).show();
                   break;
               case SmsManager.RESULT_ERROR_NO_SERVICE:
                   Toast.makeText(getBaseContext(), "No service", 
                           Toast.LENGTH_SHORT).show();
                   break;
               case SmsManager.RESULT_ERROR_NULL_PDU:
                   Toast.makeText(getBaseContext(), "Null PDU", 
                           Toast.LENGTH_SHORT).show();
                   break;
               case SmsManager.RESULT_ERROR_RADIO_OFF:
                   Toast.makeText(getBaseContext(), "No Network Detected", 
                           Toast.LENGTH_SHORT).show();
                   break;
           }

    }
};

registerReceiver (br, filter);

in public abstract void unregisterReceiver(BroadcastReceiver receiver) you must provide a BroadcastReceiver instance as the first parament. 公共抽象void unregisterReceiver(BroadcastReceiver接收器)中,您必须提供一个BroadcastReceiver实例作为第一个参数。

you can write like this: 您可以这样写:

BroadcastReceiver mReceiver= new BroadcastReceiver(){
...
}

unregisterReceiver(mReceiver);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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