广播接收器未注销 [英] Broadcast receiver not unregistering

查看:116
本文介绍了广播接收器未注销的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想让用户能够通过单击按钮来注销/注册广播接收器。

I want to give the user the ability to unregister/register the broadcast receiver with the click of the button.

首次按下按钮时,

我的问题是当我再次按下按钮时,广播接收器没有像我指定的那样取消注册

My problem is when I press the button again, the broadcast reciever is not unregistering like I specified.

有人可以检查mylogic是否有问题,或者向我解释是否有另一种方法来检测何时拔出/插入USB?

Can somebody please check if there is something wrong with mylogic, or explain to me if there is another approach to detecting when usb is unplugged/plugged in?

谢谢。

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这些行:

Your mReceiver value will always be equal to 1 because of these lines:

            int mReceiver = 0;
            mReceiver++;

我假设mReceiver是一个实例变量,在这种情况下,它应该是:

I assume that mReceiver is an instance variable, in which case it should just be:

            mReceiver++;

最好还是创建一个名为 isRegistered 。

Better still, create a boolean value called isRegistered.

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

        }

这篇关于广播接收器未注销的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆