【发布时间】:2018-09-19 18:26:09
【问题描述】:
我遇到这个问题有一段时间了,注意到其他一些人也遇到了这个问题,但我无法解决它。
问题
我有一个 BroadcastReceiver,它一直在监听 Internet 的变化。因此,每当互联网连接或断开连接时,我都会在接收者的onReceive 中获得状态。
问题是它总是被调用两次。当我连接调试器并在代码中设置断点时,我可以看到它被调用了两次,但我的状态更改代码执行。当调试器未连接时,在这种情况下,我的状态更改代码根本不会执行。
我的代码
BroadcastReceiver 文件
public class ConnectivityReceiver
extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent arg1) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected() {
ConnectivityManager
cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
public interface ConnectivityReceiverListener {
void onNetworkConnectionChanged(boolean isConnected);
}
}
清单意图操作
<receiver
android:name=".utils.ConnectivityReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
当我尝试在过滤器中仅使用<action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 时,它也出现了两次onRecieve。而当我尝试使用<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 时,我根本没有来onReceive。
基础活动
@Override
public void onNetworkConnectionChanged(boolean isConnected) {
setNetworkIndicator(isConnected); //THE CODE TO EXECUTE ON STATUS CHANGE
}
我尝试了现有的答案,但它对我不起作用。
【问题讨论】:
标签: android android-activity broadcastreceiver android-broadcast android-networking