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)
保持对接收器的全局引用,并分别在您的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)
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |