繁体   English   中英

BroadcastReceiver注销错误

[英]BroadcastReceiver unregister error

禁用开关后,我想注销广播接收器。 我已经尝试过了,但是不起作用:

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) {

如何注销。 此代码不会取消注册broadsctreciver。 它一直在运行。

实际上,无论何时进行切换,它都会继续创建多个实例( 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM