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 的连接?

4

3 回答 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;
于 2013-01-10T23:12:00.587 回答
3

如果您想这样称呼它,请发送“ping”。如果连接完成,您就知道您仍然处于连接状态。如果您得到 aIOException或 a 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();
    }
于 2013-01-10T22:58:46.923 回答
0

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

于 2018-06-29T09:27:48.823 回答