我正在开发一个Android应用程序,我有下一个问题:
我实现了用于连接更改的广播接收器,当同时启用3G和Wifi时,方法onReceive
似乎连续被调用了4次。
所以我的问题是:
有没有办法只监听互联网连接,而不是网络变更?
或者,当同时启用3G和Wifi时,方法onReceive
只能被调用一次吗?
这是我的代码:
public class NetworkChangeReceiver extends BroadcastReceiver {
public static final String TAG = "NetworkMonitoring";
@Override
public void onReceive(Context context, Intent intent) {
if (isOnline(context)) {
Log.v(TAG, "Connected!");
// update(context);
} else {
Log.v(TAG, "Not connected!");
// stopUpdate(context);
}
}
public boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected())
return true;
return false;
}
}
在Android Manifest中:
<receiver android:name="xxxxx.xxxxx.xxxxx.NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
这是日志:
05-06 16:24:05.985:V / NetworkMonitoring(569):已连接!
05-06 16:24:10.250:V / NetworkMonitoring(569):已连接!
05-06 16:24:10.720:V / NetworkMonitoring(569):已连接!
05-06 16:24:11.031:V / NetworkMonitoring(569):已连接!
(注意时间!)
答案 0 :(得分:3)
我对同一类型的广播接收器有同样的问题。 搜索了一下,找到了解决方法。
BroadcastReceiver receives multiple identical messages for one event
编辑: 解决方法是使用一个标志,告诉您何时第一次调用onReceive。
public class ConnectionChangeReceiver extends BroadcastReceiver {
private static boolean firstConnect = true;
@Override
public void onReceive(Context context, Intent intent) {
final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null) {
if(firstConnect) {
// do subroutines here
firstConnect = false;
}
}
else {
firstConnect= true;
}
}
}
希望它有所帮助。