Android - 如何检查互联网访问,而不仅仅是连接到wifi?

Amt*_*t87 13 connection android

我尝试了下面的代码来检查我的手机是否连接到无线网络,当我想知道我的手机是否连接到网络时它运行良好,但它无法提供有关互联网访问的信息...类似于" Ping"任何网站.实际上我遵循了许多链接,但仍然没有答案,所以如果有人能提供帮助,我会非常感激.

提前致谢.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Toast t = new Toast(getApplicationContext());

    if (isInternetOn()) {
         // INTERNET IS AVAILABLE, DO STUFF..
         Toast.makeText(ConnectivityTestActivity.this,"Network is Available", Toast.LENGTH_LONG).show();

         }
    else {
         // NO INTERNET AVAILABLE, DO STUFF..
        Toast.makeText(ConnectivityTestActivity.this,"No Network Available", Toast.LENGTH_LONG).show();

        }
}

public final boolean isInternetOn() {


    ConnectivityManager connec =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    // ARE WE CONNECTED TO THE NET
    if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
    connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING ||
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ||
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
    // MESSAGE TO SCREEN FOR TESTING (IF REQ)
    //Toast.makeText(this, connectionType + ” connected”, Toast.LENGTH_SHORT).show();
    return true;
    } else if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED  ) {

    return false;
    }
    return false;
    }}
Run Code Online (Sandbox Code Playgroud)

编辑:

按照以下链接,它包含Ping谷歌服务器的一个很好的答案,并得到结果

/sf/answers/1152103641/

Amt*_*t87 8

实际上我使用了相同的功能,isInternetOn()但我删除了连接条件.如果连接或不连接,它必须检查连接的状态,以及它是否正在尝试连接.这不适合我,所以我删除了连接状态检查,然后它工作.

感谢所有回复.

public final boolean isInternetOn()
{
  ConnectivityManager connec = (ConnectivityManager)
    getSystemService(Context.CONNECTIVITY_SERVICE);

  // ARE WE CONNECTED TO THE NET
  if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
       connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED )
  {
    // MESSAGE TO SCREEN FOR TESTING (IF REQ)
    //Toast.makeText(this, connectionType + ” connected”, Toast.LENGTH_SHORT).show();
    return true;
  }
  else if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
    ||  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED  )
  {
    return false;
  }

  return false;
}
Run Code Online (Sandbox Code Playgroud)

  • 只是一个注释......我在stackoverflow.com中使用了上面另一个问题的代码,我们可以在getNetworkInfo()中使用'ConnectivityManager.Type_WIFI'或'ConnectivityManager.Type_Mobile'而不是0&1 (3认同)

Beh*_*nam 6

看样品:

public static boolean isWifiEnabled() {
    if ( !gWifiManager.isWifiEnabled()) {

        if (mCanShowWifiToast) {
            new Thread(mWifiToastControl).start();
            G.gHandler.post(mNoWifiRunnable);
        }

        return false;
    } else {
        int linkspeed = gWifiManager.getConnectionInfo().getLinkSpeed();
        if (linkspeed < 5) {
            if (mCanShowWifiToast) {
                new Thread(mWifiToastControl).start();
                G.gHandler.post(mNoWifiRunnable);
            }

            return false;
        }
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)