1

是否有任何后台任务在应用程序中运行以检查以下常见情况的互联网连接?

1.开始从服务器解析/获取数据

2.在解析/从服务器获取之间

任何示例代码或链接都对我有很大帮助。

4

3 回答 3

0

您可以启动IntentServiceorService并使用它:

public boolean CheckInternet() 
    {
        ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.

        if (wifi.isConnected()) {
            return true;
        } else if (mobile.isConnected()) {
            return true;
        }
        return false;
    }

也不要忘记将此权限添加到AndroidManifest文件中:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-01-16T13:00:13.847 回答
0

您可以为这两项任务使用服务。

  • 对于第一个,在下载开始时调用服务。

  • 在服务中使用一段时间后执行的线程来检查活动的互联网连接。

编辑-

它可能是这样的,

Thread thread = new Thread()
{
      @Override
      public void run() {
          try {
              while(true) {
                  sleep(1000);
                  Toast.makeText(getBaseContext(), "Running Thread...", Toast.LENGTH_LONG).show();
                  // Check internet connectivity here
              }
          } catch (InterruptedException e) {
           Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
          }
      }
  };

thread.start();

也看看这个帖子

我还发现了另外两个选择,

看看定时器任务警报管理器也可以在一段时间后检查互联网连接。

于 2013-01-16T12:57:41.993 回答
0

您可以使用以下实用程序类,确保在清单中授予 Internet 权限。

让我知道是否有任何问题。

private static NetworkUtil mInstance;
private volatile boolean mIsOnline;

private NetworkUtil() {
    ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
    exec.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            boolean reachable = false;
            try {
                Process process = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
                int returnVal = process.waitFor();
                reachable = (returnVal==0);
            } catch (Exception e) {
                e.printStackTrace();
            }
            mIsOnline = reachable;
        }
    }, 0, 5, TimeUnit.SECONDS);
}

public static NetworkUtil getInstance() {
    if (mInstance == null) {
        synchronized (NetworkUtil.class) {
            if (mInstance == null) {
                mInstance = new NetworkUtil();
            }
        }
    }
    return mInstance;
}

public boolean isOnline() {
    return mIsOnline;
}
于 2017-02-14T15:16:12.363 回答