通过切换按钮多次注册/注销服务



这就是我的代码…我遇到了一个问题,因为注册和注销(多次)我的接收器(它正在启动一个服务)。

问题在于:我已经看到'receiver'变量在执行registerReceiver和unregisterReceiver命令后变为NULL…具体来说,在我注册和注销然后再次注册接收器之后,接收器只有NULL,因此,在再次注销它时,它会给出一个错误!基本上,我的app在注销一次Receiver后不能再次注册它。为什么这是个问题?

public class startScreen  extends Activity {
    /** Called when the activity is first created. */
    private BroadcastReceiver receiver=new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceIntent = new Intent();
        serviceIntent.setAction("com.example.MyService");
        context.startService(serviceIntent);
    }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.initial);
       final IntentFilter filter = new IntentFilter();
        filter.addAction("android.net.wifi.STATE_CHANGE");

      Button button = (Button) findViewById(R.id.button1);
      final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton1);
      try
    {
                 ... some code...             
      if(bool == true)
      {
        toggleButton.setChecked(true);
        this.registerReceiver(receiver, filter);
      }
      else
          toggleButton.setChecked(false);
    }catch(Exception e) {
           Log.e("Error", "Database", e);
          } finally {
                         ...
          }
      toggleButton.setOnClickListener(new OnClickListener() {        
          public void onClick(View v) {
              if((toggleButton.isChecked()))
              {
                  getBaseContext().registerReceiver(receiver, filter);
              }
              else
              {
                  if (receiver != null){
                      getBaseContext().unregisterReceiver(receiver);
                         receiver = null;
            }
              }
          }
    });
    }
    @Override
    protected void onResume(){
        super.onResume();
              if(bool == true)
              {
               if(receiver == null)
                   this.registerReceiver(receiver, filter);
              }                       
    }
    @Override
    protected void onPause(){
        super.onPause();
    if (receiver != null){
        this.unregisterReceiver(receiver);
        receiver = null;
    }
    }
}

toggleButton.setOnClickListeneronPause中显式地将receiver设置为null:

receiver = null;

尝试删除这些行,看看是否解决问题

最新更新