0

我有一个在启动时依赖 Internet 连接的应用程序,我可以使用下面的代码检测到它。

但是,当手机闲置一段时间并且我解锁它并启动我的应用程序时,它不会立即找到连接,我必须再次重新启动应用程序才能成功。

我曾尝试在一个线程中等待并再次重试下面的代码,但也没有成功。

任何想法将不胜感激,谢谢。

代码

    // check Network/Internet connection
    public boolean isOnline() {

    try {
        ConnectivityManager cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;

        cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();

        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI")) {
                if (ni.isConnected()) {
                    haveConnectedWifi = true;
                }
            }
            if (ni.getTypeName().equalsIgnoreCase("MOBILE")) {
                if (ni.isConnected()) {
                    haveConnectedMobile = true;
                }
            }
        }
        return haveConnectedWifi || haveConnectedMobile;
    } catch (Exception e) {
        Log.e(TAG, e.toString());
    }
    return false;
}
4

1 回答 1

1

将您的代码放入您onResume()的活动中。这样,每次您返回活动时都会对其进行检查。

此外,添加一个标志以了解是否检查连接,并在onPause()您的活动中将该标志设置为 true。在您的onResume().

就像是:

boolean check;

    protected void onCreate(Bundle blah) {
      super(blah);
      check = true;
      // whatever else
    }

    protected void onResume() {
      if(check) {
        isOnline();
        // Everything else

        check = false;
      }
      super.onResume();
    }

    protected void onPause() {
      check = true;
      super.onPause();
    }

编辑onResume()除非此活动被恢复,否则不会被调用,因此您可以添加:

protected void onResume() {
  isOnline();
  // Everything else
  super.onResume();
}

请查看Android 开发网站上的此流程图以更好地理解: 在此处输入图像描述

于 2012-12-05T06:11:53.160 回答