0

我想在开关被禁用时取消注册broadcastreceiver。我已经试过这一点,但它不工作:BroadcastReceiver取消注册错误

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

我也曾尝试:

unregisterReceiver(mReceiver); 

这里是我的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> 

这是mReceiver.java文件:

public class mReceiver extends BroadcastReceiver { 

private DevicePolicyManager mDevicePolicyManager; 
private ComponentName mComponentName; 


@Override 
public void onReceive(Context context, Intent intent) { 

如何取消注册。此代码不取消注册广告。它始终在运行。

+0

你试图使用[unregisterReceiver(https://developer.android.com/reference/android/content/Context.html#unregisterReceiver(android.content.BroadcastReceiver))来注销? – k3b

+0

是的,我试过了:unregisterReceiver(mReceiver); –

回答

0

其实它不断创造,只要你不切换多个实例(mReceiver实例):

registerReceiver(new mReceiver(), new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); 
       } 

如果你能负担得起,你可以修改你的代码,只需使用的mReceiver

final Register receiver = new mReceiver(); 

@Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked){ 
        registerReceiver(receiver , new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); 
       } 
一个实例

,这样当你注销接收者时,你注销同样的mReceiver

unregisterReceiver (receiver); 
+0

非常感谢。要取消注册,我应该使用PackageManager pm = getPackageManager();组件名称组件=新组件名称(MainActivity.this,mReceiver.class); pm.setComponentEnabledSetting(component,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP); 或unregisterReceiver(mReceiver); –

+0

不,只是* unregisterReceiver(接收器)*,它大部分时间工作 –