【问题标题】:Problem getting wifi connection broadcast event in android在android中获取wifi连接广播事件的问题
【发布时间】:2011-03-23 13:43:45
【问题描述】:

我正在尝试使用一个按钮来实现一个活动,该按钮可以在单击时打开和关闭 wifi 状态。打开和关闭工作,但同时,我想相应地改变按钮的colow或图像,即打开时不同的图像,关闭时不同的图像。为此,我创建了一个意图过滤器和一个广播接收器函数。在广播接收器中,我正在检查几个系统事件,例如电源连接/断开、电池更换、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");
    }
}};

【问题讨论】:

  • 你用的是模拟器还是真机? WiFi 和蓝牙在模拟器中不起作用。

标签: android bluetooth wifi


【解决方案1】:

我找到了另一种解决方案,因为默认方式似乎不适合我。我要做的是:

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

【讨论】:

    【解决方案2】:

    添加 "android.net.wifi.WIFI_STATE_CHANGED" 而不是 "WifiManager.WIFI_STATE_CHANGED_ACTION", 因为应该有 String 常量,而不是 String 代码段

    【讨论】:

      【解决方案3】:

      也许尝试在 ConnectivityManager 中寻找变化 intentFilter.addAction("ConnectivityManager.CONNECTIVITY_ACTION");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多