【问题标题】:Instantly check Internet connectivity即时检查互联网连接
【发布时间】:2012-03-26 03:43:19
【问题描述】:

是否有任何广播接收器(或服务)在应用程序保持运行期间不断检查互联网连接。因此,每当连接松动时,我都会收到一些连接松动的消息。 我知道ConnectivityManager

private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }

是我们可以用来检查是否与互联网连接的类吗?但我需要立即检查...

【问题讨论】:

  • 打开 www.google.com,您可以立即获得互联网连接... :)
  • ConnectivityManager 可能是您最好的选择,我之前曾尝试寻找它,但找不到任何东西。看看这个问题它有一些答案,检查连接性的小改进stackoverflow.com/questions/1560788/…
  • @user1129443 - 嘿放松,朋友们只是想让你从压力中解脱出来。希望你能尽快找到解决方案......

标签: android


【解决方案1】:

此尝试代码正在运行

public static boolean checkConnection(Context mContext) {

        NetworkInfo info = ((ConnectivityManager) mContext
                .getSystemService(Context.CONNECTIVITY_SERVICE))
                .getActiveNetworkInfo();
        if (info == null || !info.isConnected()) {
            return false;
        }
        if (info.isRoaming()) {
            return true;
        }
        return true;
    }

【讨论】:

  • @PareshMayani 正是...... ... +1
  • @user1129443 检查this 教程中的update 部分。
  • @user1129443 然后在后台服务中编写此代码。
  • @PareshMayani 我知道了,但我需要通过广播服务,我已将此代码放入服务中,并且工作正常...
  • @user1129443 很高兴您得到了解决方案!干杯
【解决方案2】:

您可以添加带有特定操作的广播:

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(connectionReceiver, filter);

【讨论】:

  • 如果你愿意,你可以在清单中定义接收者,或者你可能想在你想要的活动中定义广播。比如:private BroadcastReceiver connectionReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); //DO Something } };
  • 这个广播提示连接改变时!它不会每 N 秒收到一次意图。也许您可以在应用程序启动时保存连接(开/关),然后使用接收器更新 ir。而且您只会读取您保存的状态。
【解决方案3】:

使用 ACCESS_NETWORK_STATE 权限并创建一个连接方法

public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

【讨论】:

    【解决方案4】:

    直到您正在开发一个显示网络状态的应用程序,然后尝试使用 ConnectivityManager 和其他广播进行抢劫。

    如果是这种情况(这很常见),您需要执行一些基于网络的操作,例如从任何服务器获取一些数据。

    我不检查网络状态 但依赖于 UnknownHostException 或 RuntimeException 等,当您发出一个告诉我“嘿,网络不可用”的请求时会抛出异常。

    与发出 api 请求之前进行网络检查相比,我觉得这是更好的方法。

    1. 无需额外的连接管理器代码。

    2. 如果案例开发人员保存不可用的连接值并且不更新它并在一段时间后使用它,该怎么办。所以容易出错

    3. 它就像是在需要的准确时间进行检查,不会影响其他操作。

    4. 主要的一种情况是设备从不丢失数据的非常积极的情况 连接性。为什么要运行一段没有用的代码。

    这只是我的偏好,我并不质疑 ConnectivityManager 的存在:)。

    希望它在这个场景或其他场景中有所帮助。

    【讨论】:

    • 这将是最即时的互联网连接检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2011-04-15
    • 2017-03-16
    • 2014-02-08
    • 2012-06-12
    相关资源
    最近更新 更多