互联网连接和广播接收器

Internet connectivity and Broadcast Receiver

我正在开发需要检查互联网连接是否稳定的应用程序。如果 Internet 连接不稳定,那么我们需要调用我们的 Web 服务,否则我们不会点击它。

为此,我在 Java 中写了以下广播接收器,因为我读到 android 现在希望开发人员在 Java class 中注册此接收器。

所以这里是

private class NetworkChangeBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {


           callMyWebService();


    }


 @Override
    protected void onResume() {
        super.onResume();


        if (!isNetworkBroadcastReceiverRegistered) {
            if (NetworkChangeBR == null) {
                NetworkChangeBR = new NetworkChangeBroadcastReceiver();
                registerReceiver(NetworkChangeBR, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
                isNetworkBroadcastReceiverRegistered = true;
            }
        }

        acquireWakeLock(mCustomSharedPreferences.getBoolean(CustomSharedPreferences.KEEP_SCREEN_ON_ALL_THE_TIME, false));

    }

    @Override
protected void onPause() {
    super.onPause();
    if (isNetworkBroadcastReceiverRegistered) {
        unregisterReceiver(NetworkChangeBR);
        NetworkChangeBR = null;
        isNetworkBroadcastReceiverRegistered = false;
    }
}

问题: 但是我面临以下问题

请在这两种情况下帮助我。

你的 BroadcastReceiver 立即被触发的原因是广播 Intent ConnectivityManager.CONNECTIVITY_ACTION 是 "sticky" 广播。这允许应用程序注册并立即接收此类型的最后一个广播事件(以便它们可以确定当前的连接情况)。如果此 "sticky" 广播给您带来问题,只需在 onReceive() 中检查并忽略它:

// Ignore the sticky broadcast of the initial state
if (isInitialStickyBroadcast()) {
    return;
}

您的 BroadcastReceiver 获取的 Intent 中有大量数据作为 "extras" 传递。例如,您可以判断事件是 CONNECT 还是 DISCONNECT 事件等。查看 ConnectivityManager 上的文档以确定发送了什么 "extras" 以及如何使用它们。