nik*_*kki 2 java android broadcastreceiver wifi 3g
我正在开发一个 android 应用程序,但我遇到了下一个问题:我实现了用于连接更改的广播接收器,并且onReceive当同时启用 3G 和 Wifi 时,该方法似乎连续调用了 4 次。
所以我的问题是:
有没有办法只监听互联网连接,而不是网络变化?
或者有什么办法onReceive可以在3G和Wifi同时启用的情况下只调用一次方法?
这是我的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在 Android 清单中:
<receiver android:name="xxxxx.xxxxx.xxxxx.NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
这是日志:
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):连接!
(注意时间!)
我在使用相同类型的广播接收器时遇到了同样的问题。稍微搜索了一下,找到了解决方法。
BroadcastReceiver 为一个事件接收多条相同的消息
编辑:解决方法是使用一个标志来告诉您第一次调用 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。