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

尝试检测Wifi网络何时连接android时的奇怪行为,android,broadcastreceiver,android-wireless,Android,Broadcastreceiver,Android Wireless,我目前正在尝试用Android做一个相对简单的任务 我想检测无线网络何时完全连接。此时此刻,我不在乎是否有互联网连接,我只想知道我的设备被认为连接到网络的确切时间 我将试着描述我做了什么,以及我失败的悲惨程度 请记住,我在这里尝试过官方建议和一些答案,但都没有用 活动寄存器接收器: IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACT

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

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

我将试着描述我做了什么,以及我失败的悲惨程度

请记住,我在这里尝试过官方建议和一些答案,但都没有用

活动寄存器接收器:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(ReceiverClass,intentFilter);
在我的听筒里,我试过答案里的东西

但我的应用程序没有按预期工作。当我从顶部关闭Wifi并关闭它时,我收到一个明显的广播,但我的两个If都会失效,我会将其记录下来! 打开wifi后,我又收到了两条日志,所有东西都已连接。我试过一两件这样的事

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

if(wi != null) {
    SupplicantState ss = wi.getSupplicantState();
    Log.d("I am desperate", ss.equals(SupplicantState.COMPLETED));
    }
}
但同样的事情也发生了。我实现了三次

我不是安卓方面的专家,我相信我遗漏了一些非常明显的东西。有什么帮助吗

更新

我正在考虑这可能是安卓系统的一个问题。此刻,我不再试图从Intent那里获取信息

我已尝试使用以下命令:

Log.d("WifiState" getIntExtra(WifiManager.EXTRA_WIFI_STATE, -9000));
记录我收到的每一次广播的默认值-9000


如果我尝试广播,那就永远不会被发现。我真的很困惑…

它得到的是过渡状态和最终状态。您可以这样做:

 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

我对下面的代码有问题,但我试图添加一些对我有帮助的东西

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_状态_启用

请记住,我使用的是非库存甚至非官方的CM11.0-4.4.4,它有点被窃听,所以禁用Wifi之类的控件并不总是像预期的那样工作


我不知道您是否同时成功地使其工作,但祝您好运

当您未连接时,它是否已连接日志?我已关闭WiFi并连接广播接收器日志Daniel我也尝试与&&operator一起执行此操作。。。是不是跟ROM有关?我使用的是stock nexus设备…不,我有你的c/p解决方案。当我关闭wifi时,我得到1个已连接的o.o和3个已断开的连接。当我重新打开它时,我会连接到4x。。。我不明白really@Rouz这很奇怪。你使用的是什么版本的Android?我的测试是在4.4.2.5.1中进行的,但我在4.4.4中也看到了这一点。虽然根据文档,它应该可以正常工作,但它并没有按照预期工作。我想知道何时连接,使用此解决方案,我可以多次连接。
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");
        }
    }
}
}