2012-06-08 189 views
2

我已經有很好的搜索,並嘗試了各種答案,我看過這個,但沒有一個似乎在我的情況下工作。我正在尋找一個可靠的解決方案,因此,Android,檢查互聯網連接

我有一個不尋常的情況,我的應用程序需要連接到沒有互聯網連接的WiFi網絡來執行一些任務(本地網絡),一旦完成,它需要斷開連接並重新連接到另一個網絡,無論是移動,或互聯網連接的替代無線熱點,以便我可以做通信。

我的問題是,我的通訊科隊列需要確保它實際上有到Internet的路由時,它要開始做COMMS(這是在一個連接變化觸發)

我曾嘗試過各種電話在ConnectivityManager上,例如;

isConnected(); 
isAvailable(); 

但即使連接到我的非互聯網功能的網絡,這些返回也是如此。

我需要確保在連接到我的非互聯網功能網絡(或任何其他非互聯網功能的網絡,例如BT Openzone,未註冊和登錄時)的方式,我可以被告知沒有路由到互聯網,然後當我有路由時,我可以返回true。

我考慮過的一種可能性是ping,但如果可能的話,我更喜歡一些小巧的東西。

我試過requestRouteToHost()但沒有做到我所期望的,並且實際上試圖改變連接性,這不是我想要的。

感謝

回答

1

Check INTENT internet connection

<receiver android:name=".YOURRECEIVER"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 


public class NetworkStateReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    Log.d("app","Network connectivity change"); 
    if(intent.getExtras()!=null) { 
     NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { 
      Log.i("app","Network "+ni.getTypeName()+" connected"); 
     } 
    } 
    if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) { 
      XLog.d("app","There's no network connectivity"); 
    } 
    } 
} 
+0

我不相信這種方法是任何差異不同於我最初使用的。它會報告並正確顯示有活動連接,但不會有到遠程主機的路由。 – Hamid

0

這裏是我使用的方法:

public static boolean isNetworkAvailable(final Context context) { 
    return ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null; 
} 

這裏是如何使用的方法:

if (isNetworkAvailable(context)) { 
    // code here 
} else { 
    // code 
} 
+0

這是否適用於沒有連接的活動連接?我的問題現在已經很老了,但我想接受一個答案。當時我發現沒有真正的解決方案(API明智)不需要ping遠程主機或類似的東西。 – Hamid

+0

這可以檢測用戶是否可以訪問互聯網。我在我的所有應用程序中使用它。 –

+0

這不適用於沒有互聯網的wifi。如果第一個查詢失敗,您應該再次檢查該值(例如,ping 8.8.8.8) –