【问题标题】:Weird behavior when trying to detect when Wifi network connected android尝试检测Wifi网络何时连接android时的奇怪行为
【发布时间】:2015-04-17 21:16:58
【问题描述】:

我目前正在尝试在 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 广播 - 那甚至永远不会被抓住。在这里我真的很纳闷……

【问题讨论】:

  • 未连接时是否记录connected
  • 好吧,我关闭 WiFi 并连接广播接收器日志

标签: android broadcastreceiver android-wireless


【解决方案1】:

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

 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

【讨论】:

  • daniel 我也试过用 && 操作符来做这件事……是 ROM 的东西吗?我正在使用股票 nexus 设备...
  • 不,我有你的 c/p 解决方案。当我关闭我的 wifi 时,我得到 1 个已连接 (o.O) 和 3 个已断开连接。当我重新打开它时,我得到了 4x 连接......我真的不明白
  • @Rouz 这很奇怪。你用的是什么版本的安卓?我的测试是在 4.4.2 上。
  • 5.1 但我也在 4.4.4 下看到过​​这个
【解决方案2】:

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

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 之类的控件无法始终按预期工作。

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

【讨论】:

  • 这没有按预期工作(尽管它应该根据文档工作)。我想知道我何时连接,使用此解决方案我会多次“连接”记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 2020-12-02
相关资源
最近更新 更多