0

我目前正在尝试在 Android 中做一个相对简单的任务。

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

我将尝试描述我做了什么,以及我失败的悲惨。

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

活动注册接收器:

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

在我的接收器中,我尝试了这个答案中的东西

 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广播 - 那甚至永远不会被抓住。我在这里真的很困惑......

4

2 回答 2

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
于 2015-04-17T21:59:29.203 回答
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 等控件并不总是按预期工作。

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

于 2015-04-19T10:47:48.247 回答