web-dev-qa-db-ja.com

ネットワーク接続を確認してくださいandroid

エミュレーターでテストするアプリケーションで、次のコードを使用してネットワーク接続(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を返します...これはエミュレーターが原因ですか、それとも何か他のものですか?

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

14
amp

(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;

    }  
36
Nishant

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)
7
SuN

以下の機能でインターネット接続の接続状態を確認できます。 Google Androidは、Android APIの機能を更新して、ネットワークの状態をチェックします。現在Android最新のAPI、getAllNetworkInfo()は非推奨ですが、getAllNetworks()関数はBuild.VERSION.SDK_INT >= 21.Iに対してのみ許可されています。

インターネット接続を確認するには、この関数を呼び出します。

public static boolean checkInternetConnection(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null) {
        return false;
    } else if(Build.VERSION.SDK_INT >= 21){
        Network[] info = connectivity.getAllNetworks();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) {
                    return true;
                }
            }
        }
    } else {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
        final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnected()) {
            return true;
        }
    }

    return false;
}
2
Ashish Saini

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

要点をまとめると:

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

Settings

Settings->Data Usage

0
Gene Bo

以下のクラス を使用し、最新のAndroid利用可能なバージョンに更新:Android 10。

0
Rodrigo