最近在做wifi项目,监听网络的时候很蛋疼。每次监听到网络变化时都会受到两次,设立tag之类总是觉得不是很好的方案,今天晚上找了很久。终于发现了。现在贴上代码:
package com.example.servicedemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
public class NetWorkBroadcastReceiver extends BroadcastReceiver {
private ConnectivityManager connectivityManager;
// private NetworkInfo info;
private String WIFI = "WIFI";
private boolean tag = true;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
Bundle bundle = intent.getExtras();
NetworkInfo netInfo = (NetworkInfo) bundle.get(ConnectivityManager.EXTRA_NETWORK_INFO);
if (info != null && info.isAvailable()) {
String name = info.getTypeName();
if (WIFI.equals(name)) {
if (info.getState() == netInfo.getState()) {
System.out.println("----------------网络变化--");
}
} else {
System.out.println("----------------数据流量--" + info.getType() + "-" + info.getState() + ":" + netInfo.getType() + "-" + netInfo.getState());
}
} else {
System.out.println("----------------关闭网络");
}
}
}
}
通过两个的状态改变来判断。谢谢网上的帖子。我想很多的Receiver接收两次的现象应该能通过这种方法来判断。