2014-03-28 93 views
5

我需要讓我的應用程序等待無線連接完全建立,然後才能繼續運行。 我有這樣的代碼現在:等待網絡連接

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 


    } 
+0

[如何檢測何時在Android中建立WIFI連接?](http://stackoverflow.com/questions/5888502/how-to-detect-when-wifi-connection-has-been-established -in-android) – naXa

回答

4

您可以使用註冊的廣播接收器:

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; 
} 
+0

能否詳細說明一下?我如何讓主線程等待接收器響應? – Ricky

+0

當然,我已經編輯了答案 –

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

祝你好運。