如何以编程方式确定android是否连接到wifi?

时间:2013-01-10 22:25:50

标签: java android wifimanager

我正在尝试在我正在开发的新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的连接?

3 个答案:

答案 0 :(得分:4)

而不是手动获取networkinfo ...尝试获取“当前活动”的网络并检查是否是wifi。注意:如果为null,则表示没有连接网络...因此它将替换isConnected调用。

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

答案 1 :(得分:3)

如果要将其称为“ping”,请发送“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();
    }

答案 2 :(得分:0)

wifiManager.getWifiState()== WifiManager.WIFI_STATE_ENABLED(当您获得完全连接时)