我正在开发需要检查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;
}
}
问题: 但是我面临以下问题
在两种情况下都请帮助我。
答案 0 :(得分:1)
您的BroadcastReceiver
立即被触发的原因是广播Intent
ConnectivityManager.CONNECTIVITY_ACTION
是“粘性”广播。这使应用程序可以注册并立即接收此类型的最后一个广播事件(以便它们可以确定当前的连接情况)。如果此“粘性”广播导致您遇到问题,只需在onReceive()
中进行检查并忽略它:
// Ignore the sticky broadcast of the initial state
if (isInitialStickyBroadcast()) {
return;
}
您的Intent
获得的BroadcastReceiver
中有许多数据作为“附加”传递。例如,您可以告诉事件是CONNECT还是DISCONNECT事件,等等。检查ConnectivityManager
上的文档以确定发送了哪些“附加”信息以及如何使用它们。