14

エミュレーターでテストするアプリケーションでは、次のコードを使用してネットワーク接続 (WIFI) を確認します。

    public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

コンピューターのワイヤレス接続を無効にしても、このメソッドは常に を返しますtrue...これはエミュレーターが原因ですか、それとも何か他のものですか?

これがネットワーク接続を確認する正しい方法でない場合、どうすれば確認できますか?

4

6 に答える 6

37

(1) すべてのアクティビティがこの関数を呼び出すことができるようにコンテキストを渡し、(2) この関数を静的にすることをお勧めします。

 public boolean isNetworkOnline() {
    boolean status=false;
    try{
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getNetworkInfo(0);
        if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
            status= true;
        }else {
            netInfo = cm.getNetworkInfo(1);
            if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
                status= true;
        }
    }catch(Exception e){
        e.printStackTrace();  
        return false;
    }
    return status;

    }  
于 2012-04-04T11:06:30.633 に答える
7

getActiveNetworkInfo() を機能させるには、マニフェストに次を追加する必要があります。

1. uses-permission android:name="android.permission.INTERNET"
 2. uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE"

netInfo.isConnectedOrConnecting よりも netInfo.isConnected() を使用することをお勧めします

また、これを試してください

Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)

また

Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)
于 2012-04-04T11:15:26.107 に答える
0

私の場合、Wifi をオフにしましたが、データ/モバイル ネットワーク接続をオフにするのを忘れていました。それをしたら、このスレッドの元の投稿のコードがうまくいきました。

要点をまとめると:

  1. 設定に移動
  2. Wi-Fiをオフにする
  3. [設定] -> [データ使用量] に移動します
  4. モバイルデータをオフにする

設定

設定 -> データ使用量

于 2015-10-22T17:41:12.030 に答える
-1

これは私がプロジェクトにまとめる方法です:

マニフェスト ファイル:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

静的機能:

public static boolean isNwConnected(Context context) {
    if (context == null) {
        return true;
    }
    ConnectivityManager connectivityManager = 
        (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
    if (nwInfo != null && nwInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}
于 2015-12-04T23:05:25.827 に答える