互联网连接和广播接收器

时间:2018-10-24 11:49:54

标签: java android broadcastreceiver android-broadcastreceiver

我正在开发需要检查Internet连接是否稳定的应用程序。如果Internet连接不稳定,则需要调用Web服务,否则我们将无法实现。

为此,我阅读了以下用Java编写的Broadcast接收器,因为我读到android现在希望开发人员在Java类中注册此接收器。

所以这里是

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

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

  • 当我第一次在onResume方法中注册接收器时,它会被自动触发,这反过来会调用我的Web服务,因为实际上互联网没有发生任何变化
  • 第二,这只是检查无线连接和断开连接,但是当无线终于连接到互联网时,我想获取回调,并且当广播发生时,广播必须向我的应用程序抛出回调

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

1 个答案:

答案 0 :(得分:1)

您的BroadcastReceiver立即被触发的原因是广播Intent ConnectivityManager.CONNECTIVITY_ACTION是“粘性”广播。这使应用程序可以注册并立即接收此类型的最后一个广播事件(以便它们可以确定当前的连接情况)。如果此“粘性”广播导致您遇到问题,只需在onReceive()中进行检查并忽略它:

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

您的Intent获得的BroadcastReceiver中有许多数据作为“附加”传递。例如,您可以告诉事件是CONNECT还是DISCONNECT事件,等等。检查ConnectivityManager上的文档以确定发送了哪些“附加”信息以及如何使用它们。