【问题标题】:Checking Internet connection in Android在 Android 中检查 Internet 连接
【发布时间】:2013-01-16 12:52:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是的,哪个最适合类似服务,或者可能是接收者,我的代码仅适用于第一种情况

标签: android connection android-internet


【解决方案1】:

您可以启动 IntentServiceService 并使用它:

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" />

【讨论】:

  • 感谢您的回复,这将适用于第一种情况,如果您有任何适用于两种情况的想法,请建议我提前谢谢
  • 只要你需要就调用这个方法。如果您需要从多个类中检查这一点,您可以简单地将此代码重构为自定义 UtilClass 作为静态方法。在第一次调用服务器之前 -> MyUtils.CheckInternet()。解析数据后 + 下次调用服务器之前 -> MyUtils.CheckInternet() 等...
【解决方案2】:

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

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

  • 在服务中使用一个线程,该线程会在一段时间后执行,以检查活动的 Internet 连接。

编辑-

可能是这样的,

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();

也看看这个post

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

看看Timer TaskAlarm Manager也可以在一段时间后检查互联网连接。

【讨论】:

  • 感谢您的回复,但我不确定如何处理该主题,如果可能的话,您能帮我提供一些链接或代码吗
  • 感谢您的快速回复我有一个疑问我会写一个服务我会放置一个方法来检查互联网连接我认为如果在开始下载之前调用服务服务将在后台运行为什么我应该再次编写此线程逻辑,因为服务将始终在后台运行,如果我提出的问题不正确,如何无法将两者合并为一个单元对不起
  • @Sahil Mahajan Mj 请检查链接stackoverflow.com/questions/5738419/…,这将是第一次运行的应用程序可能你会从这个必须工作的整个应用程序中得到想法
  • 我只是想到了另一种选择。异步任务。看看它。下载开始时启动异步,它只会在下载过程中运行。我认为这是最好的选择。
【解决方案3】:

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

如果有任何问题,请告诉我。

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;
}

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多