在android中获取wifi连接广播事件的问题

时间:2011-03-23 13:43:46

标签: android bluetooth wifi

我正在尝试使用一个按钮来实现一个活动,该按钮可以在单击时打开和关闭wifi状态。打开和关闭工作,但同时,我想相应地改变按钮的颜色或图像,即打开时不同的图像和关闭时的不同图像。为此,我创建了一个Intent Filter和一个广播接收器功能。在广播接收器中,我正在检查几个系统事件,如电源连接/断开,电池更换,wifi开/关等。问题是我没有收到wifi状态更改的消息 - 我确实得到电池和电源相关的消息但不适用于wifi(PS。我对蓝牙开/关通知有同样的问题)。谁能告诉我什么可能是错的?这是代码:

protected void onResume() {
    super.onResume();

    IntentFilter intentFilter = new IntentFilter();

    intentFilter.addAction("android.intent.action.SCREEN_ON");
    intentFilter.addAction("android.intent.action.SCREEN_OFF");
    intentFilter.addAction("android.intent.action.BATTERY_LOW");
    intentFilter.addAction("android.intent.action.BATTERY_OKAY");
    intentFilter.addAction("android.intent.action.BATTERY_CHANGED");
    intentFilter.addAction("android.intent.action.ACTION_POWER_CONNECTED");
    intentFilter.addAction("android.intent.action.ACTION_POWER_DISCONNECTED");
    intentFilter.addAction("WifiManager.WIFI_STATE_CHANGED_ACTION");
    intentFilter.addAction("BluetoothAdapter.STATE_TURNING_OFF");
    intentFilter.addAction("BluetoothAdapter.STATE_ON");

    registerReceiver(myReceiver, intentFilter);
}

private BroadcastReceiver myReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        String str = intent.getAction();

        displayMessage("In myReceiver, action = " + str);
        Log.d("Settings", "Received action: " + str);

        if (str.equals("android.intent.action.BATTERY_CHANGED")) {
            displayMessage("battery changed...");
        } else if (str.equals("android.intent.action.ACTION_POWER_CONNECTED")) {
            displayMessage("power connected");
        } else if (str.equals("android.intent.action.ACTION_POWER_DISCONNECTED")) {
            displayMessage("power disconnected");
        } else if (str.equals("WifiManager.WIFI_STATE_CHANGED_ACTION")) {
            int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
            displayMessage("wifi state is " + wifiState);               
        } else if (str.equals("BluetoothAdapter.STATE_ON")) {
            displayMessage("bluetooth on");             
        } else if (str.equals("BluetoothAdapter.STATE_TURNING_OFF")) {
            displayMessage("bluetooth off");
    }
}};

3 个答案:

答案 0 :(得分:1)

我找到了另一个解决方案,因为默认方式似乎不适合我。我的工作如下:

在切换Wifi按钮上单击,我首先调用wifiManager.setWifiEnabled(!enabled),然后我调用一个启动线程的函数并检查wifiManager的状态变化。线程一直运行,直到wifi状态发生变化或者5秒钟没有任何变化。如果状态发生变化,我会向通知此事件的活动发送自定义广播。这似乎运作良好,所以我认为这个问题已经解决了。

答案 1 :(得分:1)

添加“android.net.wifi.WIFI_STATE_CHANGED”,而不是“WifiManager.WIFI_STATE_CHANGED_ACTION”, 因为应该有String常量,而不是字符串代码

答案 2 :(得分:0)

也许尝试在ConnectivityManager中查找更改  intentFilter.addAction(“ConnectivityManager.CONNECTIVITY_ACTION”);