[英]BroadcastReceiver unregister error
I want to unregister the broadcastreceiver when a switch is disabled. 禁用开关后,我想注销广播接收器。 I have tried this, but it does not work:
我已经尝试过了,但是不起作用:
Switch BTswitch = (Switch)findViewById(R.id.BTswitch);
BTswitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
registerReceiver(new mReceiver(), new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
}
else {
PackageManager pm = getPackageManager();
ComponentName component = new ComponentName(MainActivity.this, mReceiver.class);
pm.setComponentEnabledSetting(component , PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
}
}
});
I have also tried: 我也尝试过:
unregisterReceiver(mReceiver);
Here is my android manifest: 这是我的android清单:
<receiver
android:name=".mReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
This is the mReceiver.java file: 这是mReceiver.java文件:
public class mReceiver extends BroadcastReceiver {
private DevicePolicyManager mDevicePolicyManager;
private ComponentName mComponentName;
@Override
public void onReceive(Context context, Intent intent) {
How to unregister. 如何注销。 This code do not unregister the broadcstreciver.
此代码不会取消注册broadsctreciver。 It is always running.
它一直在运行。
Actually it keeps creating multiple instances ( mReceiver
instance) whenever you do switching: 实际上,无论何时进行切换,它都会继续创建多个实例(
mReceiver
实例):
registerReceiver(new mReceiver(), new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
}
If you can afford, you can modify your codes to just use one instance of the mReceiver
如果负担得起,则可以修改代码以仅使用
mReceiver
一个实例
final Register receiver = new mReceiver();
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
registerReceiver(receiver , new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
}
so that when you unregister the receiver, you unregister the same mReceiver
. 这样,当您取消注册接收者时,就可以取消注册相同的
mReceiver
。
unregisterReceiver (receiver);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.