您的位置:首页 > 其它

关于wifi连接与断开的监测

2016-03-23 13:47 429 查看
网上关于wifi打开或者关闭的监听例子还是比较多的,但是关于wifi连接到某一个point或者从某一个point断开的监听却比较少。经过研究,终于找到了对应得API。分享给大家。

下边直接上代码:

说明:这里是直接在Application里边注册的广播。代码注释已近很详细了,大家自己看。

isNetWorkConnected这个变量代表当前wifi是连接还是断开。

package com.benxun;

import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.util.Log;
import android.widget.Toast;

public class AppApplication extends Application {
private boolean isNetWorkConnected = false;

public boolean isNetWorkConnected() {
return isNetWorkConnected;
}

IntentFilter wifiFilter;
BroadcastReceiver receiver;

@Override
public void onCreate() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null) {
isNetWorkConnected = networkInfo.isConnected();
}
wifiFilter = new IntentFilter();
// 监听wifi enabled, disabled, enabling, disabling, or unknown状态
wifiFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
wifiFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
// wifiFilter.addAction(WifiManager.EXTRA_SUPPLICANT_CONNECTED);
receiver = new MyReciver();
registerReceiver(receiver, wifiFilter);

super.onCreate();
}

/**
* 当终止利用程序对象时调用,不保证1定被调用,当程序是被内核终止以便为其他利用程序释放资源,那
* 么将不会提示,并且不调用利用程序的对象的onTerminate方法而直接终止进 程
*/
@Override
public void onTerminate() {
unregisterReceiver(receiver);
receiver = null;
super.onTerminate();
}

/**
* WIFI广播接收者
*
* @author Administrator
*/
class MyReciver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
/**
* wifi打开或者关闭的广播。当应用第一次打开的时候会接收到该广播
*/
// if (intent.getAction()
// .equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
// int stat = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
//
// switch (stat) {
//
// case WifiManager.WIFI_STATE_ENABLED:
// Log.e("", "已近打开");
//
// GetNetWorkInfo();
//
// break;
//
// case WifiManager.WIFI_STATE_DISABLED:
// Log.e("", "已近关闭");
// break;
// }
// }
/**
* 当网络断开或者链接的时候回接收到该广播
*/
if (intent.getAction().equals(
WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
/**
* indicating that the state of Wi-Fi connectivity has changed.
* One extra provides the new state in the form of a NetworkInfo
* object. If the new state is CONNECTED, additional extras may
* provide the BSSID and WifiInfo of the access point. as a
* String.
*/
// 如果新的状态是Connected,那么返回的信息回包含额外的一些信息,比如Bssid,Wifiinfo
NetworkInfo info = intent
.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
Log.e("info.isConnected()", info.isConnected() + "");
if (info.isConnected()) {
if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
Toast.makeText(AppApplication.this, "您正在使用移动网络", 0)
.show();
} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
isNetWorkConnected = true;

/**
* requestRouteToHost 判断一个网络是否可以连接到一个指定的网络
* isActiveNetworkMetered 判断网络是否计费 isNetworkTypeValid
* 网络是否有效
*/
}
} else {
isNetWorkConnected = false;
}

}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: