2013-03-30 42 views
2

我在這個過程中有點晚了。我有一個相當多的屏幕/活動,都需要連接到互聯網,無論它的WiFi或網絡工作。我可以檢測到連接正常,但是是否需要對每個活動執行此檢查,或者是否有全局方式來爲我的應用程序執行此操作?在每個活動中檢查互聯網連接?

想到在添加大量代碼之前我會問。

回答

2
public class CheckNetwork { 


private static final String TAG = CheckNetwork.class.getSimpleName(); 



public static boolean isInternetAvailable(Context context) 
{ 
    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) 
    context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 

    if (info == null) 
    { 
     Log.d(TAG,"no internet connection"); 
     return false; 
    } 
    else 
    { 
     if(info.isConnected()) 
     { 
      Log.d(TAG," internet connection available..."); 
      return true; 
     } 
     else 
     { 
      Log.d(TAG," internet connection"); 
      return true; 
     } 

    } 
} 
} 

要檢查元網絡

在你的活動

if(CheckNetwork.isInternetAvailable(MainActivtiy.this)) //if connection available 
    { 

    } 

每次要檢查網絡傳遞活動場景返回true,如果有其他錯誤。

Detect whether there is an Internet connection available on Android

How to check internet access on Android? InetAddress never times out

7

您可以使用類似InternetActivity的子類Activity,並在onResume中檢查連接。然後,在您的應用中需要互聯網的所有活動應該是InternetActivity的子類,並且將自動通過調用super.onResume()或根本不覆蓋onResume來執行檢查。

-1

由於Tushar回答了above,從InternetActivity等東西繼承是好的,但你不應該在onResume檢查它,除非你使用一些服務,不斷需要互聯網連接。相反,當點擊按鈕等事件發生時,請檢查它是否轉到下一個活動;所以如果不開始另一項活動,您可以顯示敬酒以檢查互聯網連接。您應該爲需要互聯網的任何活動執行此操作,因爲整個活動很少需要連續的互聯網連接。

您可以在超類中添加這個方法:

private boolean isInternetConnected() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    return cm.getActiveNetworkInfo() != null 
      && cm.getActiveNetworkInfo().isConnectedOrConnecting(); 

} 

然後:

if(isInternetConnected()) 
    //to the internet thing 
else 
    //display toast 
0

有你能想到的另一個有趣的解決方案,通過使用廣播接收器。所以現在你打算檢查這麼多次。而不是這樣做,只有在網絡連接更改時纔會檢查,並相應地通知網絡模塊。

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);   
registerReceiver(YOUR_RECEIVER, filter); 
+0

根本沒有答案 – FARID