【问题标题】:how to programmatically determine if android is connected to wifi?如何以编程方式确定android是否连接到wifi?
【发布时间】:2013-01-10 22:25:49
【问题描述】:

我正在尝试在我正在开发的新 Android 应用程序上设置自动化测试,但其中一个 api 遇到了一些问题

我面临的问题是我想在 wifi 连接后开始测试,而不是在它处于连接状态时开始测试。我尝试了两种解决方案,但没有运气,测试似乎在我的 android 设备完全连接之前开始(wifi 条上没有 x)

wifiManager.setWifiEnabled(state);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
while (wifiInfo.getSSID() == null) {
    Log.i("WifiStatus", "Here I am");
    Thread.sleep(Time.ONE_SECOND);
    wifiInfo = wifiManager.getConnectionInfo();

这是我第一次尝试获取 SSID 以确定连接是否已建立。但测试仍会在建立完整连接之前开始,并且设置失败。

ConnectivityManager connManager = 
    (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

wifiManager.setWifiEnabled(state);
while (!networkInfo.isConnected()) {
    Log.i("WifiStatus", "Here I am");
    Thread.sleep(Time.ONE_SECOND);
    networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
}

第二个实现我改用连接管理器并使用isConnected()

是否有其他方法可以让我检查以确定设备是否已完全建立与 wifi 的连接?

【问题讨论】:

  • 可能是某种对 google.com 的 ping 操作?
  • 谢谢!我实际上不得不求助于这种方法来确定与网络的完全连接。

标签: java android wifimanager


【解决方案1】:

不要手动获取网络信息...尝试获取“当前活动”网络并检查是否是 wifi。注意:如果为 null 则表示没有连接网络……所以它替换了 isConnected 调用。

ConnectivityManager connManager = 
    (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo current = connManager.getActiveNetworkInfo();
boolean isWifi = current != null && current.getType() == ConnectivityManager.TYPE_WIFI;

【讨论】:

  • 由于某种原因,当我使用它时,我遇到了它可以连接但连接有限的问题,并继续进行我不希望它进行的测试:(
  • @Felix 我想​​要在 WI-FI 中连接 android 设备时我想调用 API 来更新数据库
【解决方案2】:

如果您想这样称呼它,请发送“ping”。如果连接完成,您就知道您仍然处于连接状态。如果您收到IOExceptionNullPointerException,那么您可能已超时并且不再连接。

try {
        URL url = new URL("http://www.google.com");
        HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
        urlConnect.setConnectTimeout(1000);
        urlConnect.getContent();
        System.out.println("Connection established.");
    } catch (NullPointerException np) {
        np.printStackTrace();
    } catch (IOException io) {
        io.printStackTrace();
    }

【讨论】:

  • 这将如何区分 3G 或 EDGE 连接中的 wi-fi 连接?
  • 该问题要求确定设备是否连接到 WI-FI,而不是蜂窝网络。
  • 感谢 syb0rg!帮助很大。不确定我使用的 api 是否已经处理了它,但这是解决问题的方法。
【解决方案3】:

wifiManager.getWifiState()== WifiManager.WIFI_STATE_ENABLED 完全连接时

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多