2

このコードを使用して、アプリの読み込み中にデバイスがオンラインかどうかを確認します。

public boolean isOnline() 
{
    ConnectivityManager connMgr = (ConnectivityManager) 
            getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return (networkInfo != null && networkInfo.isConnected());
}  

ただし、テストのためにコンピューターのWifiがオフになっている場合でも、これは常にtrueを返します。この機能は、接続機能または実際の接続をテストするだけですか?

ありがとう!

4

3 に答える 3

9

使用してみてください:

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

mContext使用しているコンテキストはどこにありますか。

私の推測では、コードはデバイス上で正常に機能しますが、エミュレーターでテストしている可能性があります。コンピューターのインターネットをオフにしても、エミュレーターが接続されたままになることがあることに気づきました。正しい機能を実現するには、コンピューターのWiFiをオフにするのではなく、設定に移動して、そこからWiFiとモバイルデータを無効にする必要があります。

さらに、上記のコードは、デバイスが接続中の場合にもtrueを返しますが、使用しているコードは、すでに接続が確立されている場合にのみtrueを返します。

于 2012-10-05T19:14:05.447 に答える
4

このコードはいつも私のために働いてきました。

`

public boolean isNetworkAvailable() {
        ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);

// test for connection
        if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable()
                && cm.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    } 
于 2012-10-05T19:31:26.647 に答える
1
protected boolean isOnline() 
{
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null) { // connected to the internet
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
            if (activeNetwork.isConnected())
                haveConnectedWifi = true;
        } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
            if (activeNetwork.isConnected())
                haveConnectedMobile = true;
        }
    }

    return haveConnectedWifi || haveConnectedMobile;
}

そして、この2つの権限が必要ですmanifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2016-11-17T03:20:07.210 に答える