在android上检查互联网连接

kai*_*uki 22 connection android

我有以下代码用于检查我的应用程序上的互联网连接wifi/EDGE/GPRS/3G.

代码是

public static boolean checkConn(Context ctx) {
    ConnectivityManager conMgr = (ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED
        || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING) {
        return true;
    } else if (conMgr.getNetworkInfo(0).getState()==NetworkInfo.State.DISCONNECTED
        || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED){
        return false;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我打电话给它如下:

if (CheckInternet.checkConn(introPage.this) == true) {
    Intent toMainPage = new Intent(introPage.this, mainPage.class);
    System.gc();
    startActivity(toMainPage);
} else if (CheckInternet.checkConn(getApplicationContext()) == false) {
    Toast.makeText(getApplicationContext(),
        "Sorry, No internet connectivity found", Toast.LENGTH_SHORT)
            .show();
}
Run Code Online (Sandbox Code Playgroud)

但我有一个问题,那就是如果我连接到wifi,我打开应用程序,它工作正常,但如果我关闭应用程序并关闭wifi并重新打开应用程序,它不会通过错误"没有连接",我需要关闭我的设备,然后打开它,同样的情况是如果wifi关闭,我打开应用程序,它会抛出"无连接"的错误,如果我打开它,仍然它抛出"无连接"的相同错误,除非我关闭并打开设备.

Emm*_*uel 68

有时,活动连接不是列表中的第一个,或者处于非活动状态或处于错误状态.我就是这样做的:

  NetworkInfo i = conMgr.getActiveNetworkInfo();
  if (i == null)
    return false;
  if (!i.isConnected())
    return false;
  if (!i.isAvailable())
    return false;
  return true;
Run Code Online (Sandbox Code Playgroud)

[编辑1]不要忘记在应用程序清单中添加此权限:

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)

这对你有帮助吗?

灵光

  • 您必须为此检查网络类型.i.getType()== ConnectivityManager.TYPE_MOBILE,您甚至可以获得子类型.i.getSubType()== TelephonyManager.NETWORK_TYPE_* (2认同)
  • @Emmanuel:另外,在某些国家/地区,如果没有{}的块,则会有法律规定. (2认同)