如何通过编程确定Android是否连接到WiFi?

4
我正在尝试为我正在开发的新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测试? - twoleggedhorse
谢谢!我实际上不得不采用那种方法来确定与网络的完全连接。 - kptkev
3个回答

4

与其手动获取网络信息,不如尝试获取“当前活动”的网络并检查它是否为Wifi。注意:如果为空,则意味着没有连接任何网络...因此会替换 isConnected 调用。

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

由于某些原因,当我使用它时,遇到了连接但连接受限的问题,并继续进行测试,这不是我想要的 :( - kptkev
@Felix 我想要在安卓设备连接到WI-FI时调用API来更新数据库。 - Hardik Parmar

3

发送一个“ping”,如果你想这样称呼它。如果连接成功,你就知道你仍然连接着。如果你得到了一个IOException或者NullPointerException,那么你很可能超时了,不再连接。

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();
    }

4
这个问题是如何区分 Wi-Fi 连接和 3G 或 EDGE 连接? - 9000
问题要求确定设备是否连接到WI-FI,而不是蜂窝网络。 - syb0rg
谢谢syb0rg!帮了很大的忙。我不确定我正在使用的API是否已经解决了这个问题,但这是一个解决问题的方法。 - kptkev

0

wifiManager.getWifiState()== WifiManager.WIFI_STATE_ENABLED 当你获得完整的连接时


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接