2014-01-14 57 views
0

如何从类中注销接收者?到目前为止,我得到了这个代码..当我第一次按下按钮,一切正常,但是当我再次按它时,应用程序崩溃,错误:..错误接收广播意图...和错误不处理。据我的理解,我不能注册接收器两次,但如何克服这一点?Android - 从类中取消注册BroadcastReceiver?

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); 
      } 



    } 

} 

回答

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); 
    } 

} 
0

要注册和的onResume()和注销的onPause接收器()。

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

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

清洁香港这样的:https://developers.geoloqi.com/android/handling-events

相关问题