Android - 从类中取消注册BroadcastReceiver?

Dai*_*lis 0 android broadcastreceiver

如何从课堂上取消注册接收器?到目前为止我得到了这个代码..当我第一次按下按钮时,一切正常,但当我再次按下它时,应用程序崩溃并出现错误:..Error接收广播意图...并且错误未得到处理.根据我的理解,我不能两次注册接收器,但如何克服这一点?

public class ApplianceButtonToggleOnClickListener implements OnCheckedChangeListener {
LinearLayoutWithImage mHardwareCell;
Activity mActivity;
    public ApplianceButtonToggleOnClickListener(
            LinearLayoutWithImage mHardwareCell, Activity mActivity) {
        this.mHardwareCell = mHardwareCell;
        this.mActivity = mActivity;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
     ...

          mActivity.startService(intentMyIntentService);
          ApplianceStateChangeSuccessReceiver successReceiver = new  ApplianceStateChangeSuccessReceiver(mActivity,mHardwareCell);
          IntentFilter intentHardwareSyncFilter = new IntentFilter(UpdateHardwareStateService.ACTION_UpdateHardwareStateService);
      intentHardwareSyncFilter.addCategory(Intent.CATEGORY_DEFAULT);    


      try {
          mActivity.registerReceiver(successReceiver, intentHardwareSyncFilter);} catch (IllegalArgumentException e) {
                Log.d ("APPLIANCE_BUTTON_TOGGLE_ON_CLICK", "ApplianceButtonToggleOnClick: error " +e);
          }



    }

}
Run Code Online (Sandbox Code Playgroud)

Sub*_*sed 5

保持对接收器的全局引用,并分别在您的onStart()onStop()方法中注册/取消注册它.此外,如果您收到"接收广播意图的错误",则您的接收器可能正在接收广播,并且您正在正确处理它 - 但是,没有看到堆栈跟踪/您的接收器代码主要只是猜测.这是一个简单的例子:

public class MainActivity extends Activity {

BroadcastReceiver yourReceiver;

    @Override
    protected void onCreate(Bundle bundle){
        super.onCreate(bundle);
        yourReceiver = new YourImplementation();
    }

    @Override
    protected void onStart(){
        super.onStart();
        registerReceiver(yourReceiver, new IntentFilter(YOURACTION));
    }

    @Override
    protected void onStop(){
        super.onStop();
        unregisterReceiver(yourReceiver);
    }

}
Run Code Online (Sandbox Code Playgroud)