尝试检测Wifi网络连接android时的奇怪行为

时间:2015-04-17 21:16:58

标签: android broadcastreceiver android-wireless

我目前正在尝试在Android中执行相对简单的任务。

我想检测无线网络何时完全连接。此刻我不关心是否有互联网连接,我只想知道我的设备被认为连接到网络的确切时刻。

我将尝试描述我的所作所为,以及我失败的可悲之处。

请记住,我在这里尝试过官方建议以及一些答案,但无济于事。

活动注册接收者:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(ReceiverClass,intentFilter);

在我的接收器中,我尝试了this回答

中的内容
 NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
  if(info != null) {
     if(info.isConnected()) {
        // Do your work
        Log.d("tag", "connected");
     }
  }

但我的应用程序没有按预期工作。当我杀了Wifi(从顶部滑动并关闭它)我接收广播(显然),但我的两个If都是低谷,我得到了这个记录! 打开wifi后,我得到另外2个日志,一切都已连接。我尝试了一两件这样的事情

WifiInfo wi =  intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);

if(wi != null) {
    SupplicantState ss = wi.getSupplicantState();
    Log.d("I am desperate", ss.equals(SupplicantState.COMPLETED));
    }
}

但同样的事情发生了。我实现了3次。

我不是android的专家,我相信我错过了一些非常明显的东西。对我有什么帮助吗?

更新

我更考虑这可能是Android系统中的一个问题。目前我停止尝试从Intent获取信息。

我尝试使用EXTRA_WIFI_STATE但命令:

Log.d("WifiState" getIntExtra(WifiManager.EXTRA_WIFI_STATE, -9000));

对于我收到的每个广播,始终记录默认值(-9000)。

如果我尝试SUPPLICANT_CONNECTION_CHANGE_ACTION广播 - 那甚至都没有被抓住。我真的很困惑......

2 个答案:

答案 0 :(得分:0)

它正在获得临时状态以及最终状态。你可以这样做:

 public class WiFiConnections extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
                NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
                if (info != null && info.isConnectedOrConnecting()) {
                    if (info.isConnected()) {
                        Log.i("WiFi", "connected");
                    }
                }
                else{
                    Log.i("WiFi", "disconnected");
                }
            }
        }
    }

我刚试过这个,这里是结果日志:

04-17 14:55:31.479  13780-13780/com.wifitest.danu.wifitext I/WiFi﹕ disconnected
04-17 14:57:20.489  15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ connected
04-17 14:57:34.769  15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ disconnected
04-17 14:57:51.349  15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ connected
04-17 14:58:38.069  15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ disconnected
04-17 14:58:52.489  15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ connected

答案 1 :(得分:0)

我遇到了代码问题,但我试图添加一些帮助我的东西。

public class WifiReceiver extends BroadcastReceiver {


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

    NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
    if(info != null) {

        WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        boolean wen = wifi.isWifiEnabled();

        if(info.isConnected()) {
            // Do your work.

            Log.wtf("Wifi", "Connected");

            // e.g. To check the Network Name or other info:
            //WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
            //WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            //String ssid = wifiInfo.getSSID();
        }
        else if(!(wen)){
            Log.wtf("Wifi", "No");
        }
    }
}
}

就我在Android上发现的情况而言,Wifi不会立即停用。它有一些子状态,如启用和禁用,将记录为已启用。

这是按预期记录已连接但有时它没有按预期记录已断开连接(它实际上没有记录任何内容,至少没有垃圾邮件连接/否)。我在关闭时检查了Wifi状态的多种方式,但有时它只是被启用(尝试通过getWifiState()时状态3 / WIFI_STATE_ENABLED)。

请记住,我使用的是非库存甚至非官方的CM11.0 - 4.4.4并且它有点故障,所以像禁用Wifi这样的控件并不总是按预期工作。

我不知道你是不是设法让它同时工作但是好运呢

相关问题