0

デバイスの実際の接続状態を知る方法。私のアプリケーションでは、ConnectivityManager.CONNECTIVITY_ACTION インテントに登録しました。インテントを受け取ると、デバイスに接続があるとのことです。

ConnectivityManager.EXTRA_NO_CONNECTIVITY from intent == false

NetworkInfo ni = connectivityManager.getActiveNetworkInfo();
ni.isAvailable() == true
ni.isConnected() == true

そうです、デバイスはたとえば Wi-Fi ポイントに接続されており、信号強度は問題ありませんが、プロバイダー側​​で現在インターネット アクセスが切断されているため、アプリケーションはサーバーに接続できません。ステータス バーの wifi アイコンが灰色になっているため、デバイスはこの問題を認識しているようです。

インターネット接続の実際の状態を知る方法は?

4

3 に答える 3

0

これを使用して、接続されているかどうかを判断できます。

final ConnectivityManager connectManager = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);

final NetworkInfo mobile = connectManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
final NetworkInfo wifi   = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI  );

// Return true if connected, either in 3G or wi-fi
return ((mobile != null && mobile.getState() == NetworkInfo.State.CONNECTED) || 
        (wifi   != null && wifi.getState()   == NetworkInfo.State.CONNECTED)   );
}
于 2013-01-31T07:47:52.687 に答える
0

以下のコードを使用して、デバイスのインターネット接続を確認できます。お役に立てば幸いです。

 public static boolean IsNetConnected(Context mContext)
{
    boolean NetConnected = false;
    try
    {
        ConnectivityManager connectivity =
                (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null)
        {
            NetConnected = false;
        }
        else
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
            {
                for (int i = 0; i < info.length; i++)
                {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        NetConnected = true;
                    }
                }
            }
        }
    }
    catch (Exception e)
    {
        NetConnected = false;
    }
    return NetConnected;
}
于 2013-01-31T07:48:13.833 に答える
0

あなたが正しいです。接続ステータスを検出する 100% 正確な方法ではありませんが、試してみてください。

public static boolean hasActiveInternetConnection(Context context) {
    if (isNetworkAvailable(context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500); 
            urlc.connect();
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            Log.e(LOG_TAG, "Error checking internet connection", e);
        }
    } else {
        Log.d(LOG_TAG, "No network available!");
    }
    return false;
}

一部の国では Google が制限されている可能性があることに注意してください

于 2013-01-31T07:52:46.873 に答える