2011-08-15 26 views
1

こんにちは、私は私のデバイスは、現在、インターネットに接続されたりせず、私がチェックするConnectivityManagerを使用して、このクラスを書いているかどうかを確認するために必要なすべてを検証する:ConnectivityManagerインターネット接続

public boolean checkInternetConnection() { 
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) { 
     return true; 

    } else { 
     return false; 
    } 
} 
素晴らしい作品

、今のためにメソッドはメインパッケージ(com.App)のクラスにありますが、com.App.Utilityで定義されたクラスで動作するようにコードを変更する必要はありますか?

ありがとうございます!

答えて

8
package com.app.utility; 

    public class Utilities { 

    public static final boolean CheckInternetConnection(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) { 
     return true; 

     } else { 
     return false; 
     } 
    } 
    } 
+0

パーフェクト感謝:) –

2

getActiveNetworkInfo()を使用する場合の唯一の問題は、接続が正しく検出されない状況がいくつかあることです。たとえば、モバイルネットワークが電話で無効になっていても無線LANが使用可能な場合、アクティブなネットワークはモバイルネットワークとしてカウントされる可能性があり、したがってfalseを返します。

選択肢は次のとおりです。

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfoMob = cm.getNetworkInfo(cm.TYPE_MOBILE); 
    NetworkInfo netInfoWifi = cm.getNetworkInfo(cm.TYPE_WIFI); 
    if ((netInfoMob != null || netInfoWifi != null) && (netInfoMob.isConnectedOrConnecting() || netInfoWifi.isConnectedOrConnecting())) { 
     return true; 
    } 
    return false; 
} 
1

Thxをアラン・H!

netInfoMobとnetInfoWifiのいずれかがnullの場合、if条件がNPEを引き起こす可能性があります。

この1つは私の作品:

netInfoMobile != null && netInfoMobile.isConnectedOrConnecting() || 
netInfoWifi != null && netInfoWifi.isConnectedOrConnecting() 
関連する問題