我想让用户能够通过单击按钮取消注册/注册广播接收器。
第一次按下按钮时,广播接收器被注册,设备连接时出现提示。
我的问题是当我再次按下按钮时,广播接收器并没有像我指定的那样取消注册。
有人可以检查 mylogic 是否有问题,或者向我解释是否有另一种方法可以检测 usb 何时拔出/插入?
谢谢。
btn.setOnClickListener(new View.OnClickListener() {
BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
int plugged = intent.getIntExtra(
BatteryManager.EXTRA_PLUGGED, -1);
if (plugged == BatteryManager.BATTERY_PLUGGED_USB) {
Toast.makeText(getApplicationContext(),
"Connected to USB", Toast.LENGTH_SHORT).show();
}
if (plugged != BatteryManager.BATTERY_PLUGGED_USB) {
Toast.makeText(getApplicationContext(),
"Disconnected from USB", Toast.LENGTH_SHORT)
.show();
}
}
};
@Override
public void onClick(View v) {
int mReceiver = 0;
mReceiver++;
if (mReceiver % 2 == 1) {
IntentFilter filter = new IntentFilter(
Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, filter);
}
if (mReceiver % 2 == 0) {
unregisterReceiver(receiver);
Toast.makeText(getApplicationContext(),
"Should be unregistered", Toast.LENGTH_LONG).show();
}
}
});
最佳答案
由于这些行,您的 mReceiver 值将始终等于 1:
int mReceiver = 0;
mReceiver++;
我假设 mReceiver 是一个实例变量,在这种情况下它应该只是:
mReceiver++;
更好的是,创建一个名为 isRegistered
的 bool 值。
@Override
public void onClick(View v) {
if (!isRegistered) {
IntentFilter filter = new IntentFilter(
Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, filter);
isRegistered = true;
}
else {
unregisterReceiver(receiver);
isRegistered = false;
}
}
关于android - 广播接收器未注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23717933/