這裏簡單的版本:
/*@return boolean return true if the application can access the internet*/
public static boolean haveInternet(Context context){
NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info==null || !info.isConnected()) {
return false;
}
if (info.isRoaming()) {
// here is the roaming option you can change it if you want to disable internet while roaming, just return false
return true;
}
return true;
}
在這裏,你有WiFi的喜好擁有它,你可以,如果你想要一些行動,通過設置爲只用wifi偏好的限制規定。例如,您可以使用withRoamingPref = false檢查小型下載;任何互聯網連接返回true。 然後使用withRoamingPref = true檢查是否有大量下載,在這種情況下,它將檢查用戶是否啓用了「only wifi」來下載它們,如果使用wifi則返回true,如果用戶允許移動連接下載它們,則返回true;如果沒有互聯網連接或者您正在使用移動連接並且用戶已禁用它以下載大量文件,則爲false。
public static boolean haveInternet(Context context, boolean withRoamingPref){
NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info==null || !info.isConnected()) {
return false;
}
if (info.isRoaming()) {
// here is the roaming option you can change it if you want to disable internet while roaming, just return false
if(withRoamingPref) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
boolean onlyWifi = settings.getBoolean("onlyWifi", false);
if (onlyWifi) {
return false;
}else{
return true;
}
}else{
return true;
}
}
return true;
}
修改的情況下返回所有三種狀態,並決定如何在另一塊的應用程序的行爲:
/*@return int return 0 if the application can't access the internet
return 1 if on mobile data or 2 if using wifi connection*/
public static int haveInternet(Context context){
NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info==null || !info.isConnected()) {
return 0;
}
if (info.isRoaming()) {
return 1;
}else{
return 2;
}
}
PS:不是數字的,你應該用靜態分配每個州int然後返回,而不是原始的int。例如,在課程開始時聲明:
public static int INTERNET_DISABLED = 0;
然後而不是「返回0;」你將使用「return INTERNET_DISABLED;」
這樣你就不必記住意味着每個號碼,您將在對名稱的應用程序的其他部分檢查如:
if(myClass.haveInternet == myClass.INTERNET_DISABLED){
//TODO show no internet message
}
在我的應用程序我需要知道用戶是通過移動數據連接的,因爲我可以讓他只下載小的東西,並將大文件限制爲僅用於WiFi。當沒有連接可用時給出錯誤 – WHDeveloper
漫遊意味着手機通過移動數據連接,所以您已經覆蓋了,第二個snipet代碼是我用於此目的的,我將重新解釋說明。但您可以將布爾值更改爲int,並且返回0表示無連接,1表示移動數據,2表示無線連接。 – Aerinx
也檢查我最後的編輯,我認爲這就是你要找的,我回答時忽略了你的問題的標題,如果你需要更多的幫助,如何管理和使用靜態詮釋變量,請離開。 – Aerinx