2011-05-05 61 views
1

我使用下面的代碼來檢查遠程服務或訪問任何網頁時的網絡可用性,因爲我會在每次訪問Web服務之前調用下面的方法,但是我需要任何監視器,它在後臺定期監視Web服務並且拋出一個警報網絡不可用,並且如果網絡恢復,則它會重新啓動網絡以警告網絡,我不知道如何實現它。android中的網絡檢查功能?

public boolean isOnline(Context context) 
{ 
    boolean state=false; 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (wifiNetwork != null) { 
     state=wifiNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    if (mobileNetwork != null) { 
     state=mobileNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null) { 
     state=activeNetwork.isConnectedOrConnecting(); 
    } 

    return state; 
} 
+0

使用搜索http://stackoverflow.com/questions/1783117/network-listener-android – 2011-05-05 12:16:14

回答

2

爲此,您需要實現廣播接收器,它將在後臺檢查網絡連接並在網絡連通或不連接時發出警報。

請嘗試下面的代碼。

1)製作一個擴展brodcast接收器的類。

public class CheckInternetConnectionChangeReceiver extends BroadcastReceiver 
{ 
public static boolean connectionStatus = false; 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    connectionStatus = CheckInternetConnection(context); 
    if(connectionStatus) 
     Toast.makeText(context, "Internet Connection Available", Toast.LENGTH_LONG).show(); 
    else 
     Toast.makeText(context, "Internet Connection Not Available", Toast.LENGTH_LONG).show(); 
} 

public boolean CheckInternetConnection(Context context) 
{ 
    ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (wifi.isConnected()) 
    { 
     return true; 
    } 
    else if (!mobile.isConnected()) 
    { 
     return false; 
    } 
    else if (mobile.isConnected()) 
    { 
     return true; 
    } 

    return false; 
} 

}

//這裏connectionStatus是根據網絡將存儲的真或假值的一個布爾變量。如果可用,它將存儲真值,否則它將存儲錯誤的值。

現在將下面的代碼粘貼到您的Android清單文件中。

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

現在,當連接發生變化時,它將調用brodcast接收器並將相應的值存儲在connnectionStatus變量中。