3

次のコードを使用して、電話がインターネットに接続されているかどうかを識別しています。

public static boolean isOnline(Context context) {  
    try {
        ConnectivityManager cm = (ConnectivityManager) 
        context.getSystemService(Context.CONNECTIVITY_SERVICE);  
        return cm.getActiveNetworkInfo().isConnectedOrConnecting();
    } catch(Exception e) {
        return false;
    }
}

このチェックでは、電話が自宅のwifiに接続されているが、インターネットに接続されていないことに注意してください。それでも、このメソッドは私をtrueにしています。インターネットが存在すると仮定してコードを試行すると、アプリケーションがクラッシュします。クラッシュを防ぐためにさらに例外処理を追加できますが、実際のインターネット接続ステータスを返すことができるインターネット接続を確認するより良い方法が必要です...

4

4 に答える 4

0

これは私のために働いた:

public boolean networkCheckIn(){
try{

ConnectivityManager networkInfo = (ConnectivityManager) getSystemService(MapViewActivity.CONNECTIVITY_SERVICE) ;
networkInfo.getActiveNetworkInfo().isConnectedOrConnecting() ;

Log.d("1", "Net avail:"
                + networkInfo.getActiveNetworkInfo().isConnectedOrConnecting());

ConnectivityManager cm = (ConnectivityManager) getSystemService(MapViewActivity.CONNECTIVITY_SERVICE);
 NetworkInfo netInfo = cm.getActiveNetworkInfo();
 if (netInfo != null && netInfo.isConnectedOrConnecting()) {
    //Log.d("2", "Network available:true");
     return true;

  } else {
            //Log.d("3", "Network available:false");
            return false;
   }

}catch(Exception e){
        return false ;
}
}
于 2013-02-21T19:18:07.593 に答える
0

あなたの問題は方法getActiveNetworkInfo()です。

例:Wi-Fiのネットワーク状態を取得するには:

public static boolean isWifiAvailable(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm == null)
        return false;

    NetworkInfo[] networkInfos = cm.getAllNetworkInfo();
    for (NetworkInfo ni : networkInfos) {
        if (ni.getType() == ConnectivityManager.TYPE_WIFI && ni.isConnected())
            return true;
    }
    return false;
}// isWifiAvailable()

にはさらに多くのタイプがありますConnectivityManager(で始まりTYPE_*ます)。

于 2013-02-21T20:20:23.017 に答える
0

私はいつも使用します:

public static boolean isOnline(Context ctx) {

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx.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 false;
    }
    return true;
}

デバイスがローミングしているかどうかを確認する追加のチェックがありtrueます。

<application>タグの外側のマニフェストに適切なアクセス許可を追加することを忘れないでください。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-02-21T19:17:41.467 に答える
0

これを使って :

public  boolean isConnected() {
        boolean conectado;
        if (conectivtyManager.getActiveNetworkInfo() != null
                && conectivtyManager.getActiveNetworkInfo().isAvailable()
                && conectivtyManager.getActiveNetworkInfo().isConnected()) {
            conectado = true;
        } else {
            conectado = false;
        }
        return conectado;
    }

この許可を配置します。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
于 2013-02-21T19:12:33.127 に答える