等待网络连接

时间:2014-03-28 12:17:44

标签: java android

我需要让我的应用等待,直到完全建立wifi连接,然后才继续运行。 我现在有这个代码:

wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
    if(!wifiManager.isWifiEnabled())
    {
        Toast.makeText(this, "Connecting to wifi network", Toast.LENGTH_SHORT).show();
        wifiManager.setWifiEnabled(true);
        //wait for connection to be establisihed and only then proceed


    }

2 个答案:

答案 0 :(得分:5)

您可以使用注册的广播接收器:

android.net.conn.CONNECTIVITY_CHANGE

监听状态更改并使用当前状态保留变量

更多信息here


<receiver android:name="your.package.WifiReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
 </receiver>

接收者:

public class WifiReceiver extends BroadcastReceiver {

    public static boolean connected = false;

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager mgr = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = mgr
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        connected = networkInfo != null && networkInfo.isConnected();
    }
}

public boolean isConnected(){
    return connected; 
}

答案 1 :(得分:2)

您可以通过连接通知向用户引入屏幕,而不是阻止主线程,让他们知道发生了什么。

在显示包含通知的屏幕时,您可以使用

检查连接
  

<强> ConnectivityManager

请注意,仅检查WIFI连接并不能保证数据服务。可能总是发生网络问题,服务器停机,授权等。

使用示例:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

另外,请勿忘记添加正确的权限

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

您可以在Android开发者网站上找到更多相关信息: Determining and Monitoring the Connectivity Status

祝你好运。