package com.martin.simpledevelop.utils.net;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.IBinder;
import com.martin.simpledevelop.utils.log.SaLogUtils;
import java.util.List;
/**
* @Description 网络 工具类<Br>
* @File SaNetWorkUtils.java
* @Package com.martin.simpledevelop.utils.net
* @Date 2015年6月26日上午1:22:57
* @Author Donghongyu 1358506549@qq.com
* @Version v1.0.0
*/
public class SaNetWorkUtils {
/**
* Log 输出标签
*/
public static String TAG = SaNetWorkUtils.class.getName();
/**
* 接受网络状态的广播Action
*/
public static final String NET_BROADCAST_ACTION = "com.network.state.action";
public static final String NET_STATE_NAME = "network_state";
/**
* 实时更新网络状态<br>
* -1为网络无连接<br>
* 1为WIFI<br>
* 2为移动网络<br>
*/
public static int CURRENT_NETWORK_STATE = -1;
/**
* 判断网络是否连接
*
* @param context
* @return
*/
public static boolean isConnected(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null != connectivity) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (null != info && info.isConnected()) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
SaLogUtils.i(TAG, "当前网络可用...");
return true;
}
}
}
SaLogUtils.e(TAG, "当前网络不可用....");
return false;
}
/**
* 判断是否是wifi连接
*
* @param context
* @return
*/
public static boolean isWifi(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null) {
SaLogUtils.i(TAG, "当前网络----->不可用");
return false;
}
boolean isWifi = cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
if (isWifi)
SaLogUtils.i(TAG, "当前网络----->WIFI环境");
else
SaLogUtils.i(TAG, "当前网络----->非WIFI环境");
return isWifi;
}
/**
* 打开网络设置界面
*
* @param activity
* 当前界面
*/
public static void openSetting(Activity activity) {
Intent intent = new Intent("/");
// 判断手机系统的版本 即API大于10 就是3.0或以上版本
if (android.os.Build.VERSION.SDK_INT > 10) {
intent = new Intent(
android.provider.Settings.ACTION_WIRELESS_SETTINGS);
} else {
intent = new Intent();
ComponentName component = new ComponentName("com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(component);
intent.setAction("android.intent.action.VIEW");
}
activity.startActivityForResult(intent, 0);
}
/**
*
* 开启服务,实时监听网络变化 需要自己在清单文件中配置服务<br>
* 然后把对应的Action传入<br>
* 服务类:com.martin.utils.net.NetWrokListener
*
* @param context
* @param action
*/
public static void startNetService(Context context, String action) {
// 注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(NET_BROADCAST_ACTION);
context.registerReceiver(mReceiver, intentFilter);
// 开启服务
Intent intent = new Intent();
SaLogUtils.d(TAG, "开启网络监听服务");
intent.setAction(action);
context.bindService(intent, new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
}, Context.BIND_AUTO_CREATE);
}
// 接受服务上发过来的广播
private static BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
CURRENT_NETWORK_STATE = (Integer) intent.getExtras().get(
NET_STATE_NAME);
switch (CURRENT_NETWORK_STATE) {
case -1:
SaLogUtils.d(TAG, "网络更改为 无网络 CURRENT_NETWORK_STATE ="
+ CURRENT_NETWORK_STATE);
break;
case 1:
SaLogUtils.d(TAG, "网络更改为 WIFI网络 CURRENT_NETWORK_STATE="
+ CURRENT_NETWORK_STATE);
break;
case 2:
SaLogUtils.d(TAG, "网络更改为 移动网络 CURRENT_NETWORK_STATE ="
+ CURRENT_NETWORK_STATE);
break;
default:
break;
}
}
}
};
/**
*
* 描述:打开wifi.
*
* @param context
* @param enabled
* @return
*/
public static void setWifiEnabled(Context context, boolean enabled) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
if (enabled) {
wifiManager.setWifiEnabled(true);
} else {
wifiManager.setWifiEnabled(false);
}
}
/**
*
* 描述:得到所有的WiFi列表.
*
* @param context
* @return
*/
public static List<ScanResult> getScanResults(Context context) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> list = null;
// 开始扫描WiFi
boolean f = wifiManager.startScan();
if (!f) {
getScanResults(context);
} else {
// 得到扫描结果
list = wifiManager.getScanResults();
}
return list;
}
/**
*
* 描述:根据SSID过滤扫描结果.
*
* @param context
* @param bssid
* @return
*/
public static ScanResult getScanResultsByBSSID(Context context, String bssid) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
ScanResult scanResult = null;
// 开始扫描WiFi
boolean f = wifiManager.startScan();
if (!f) {
getScanResultsByBSSID(context, bssid);
}
// 得到扫描结果
List<ScanResult> list = wifiManager.getScanResults();
if (list != null) {
for (int i = 0; i < list.size(); i++) {
// 得到扫描结果
scanResult = list.get(i);
if (scanResult.BSSID.equals(bssid)) {
break;
}
}
}
SaLogUtils.d(TAG, "根据SSID过滤扫描结果>>>" + scanResult);
return scanResult;
}
/**
*
* 描述:获取连接的WIFI信息.
*
* @param context
* @return
*/
public static WifiInfo getConnectionInfo(Context context) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
SaLogUtils.d(TAG, "获取连接的WIFI信息>>>" + wifiInfo);
return wifiInfo;
}
}