import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.List;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.telephony.cdma.CdmaCellLocation;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;public classNetWorkUtil {public staticboolean isWifiAvailable() {
ConnectivityManager connectivityManager=(ConnectivityManager) ConfigManager
.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();return (networkInfo != null && networkInfo.isConnected() &&networkInfo
.getType()==ConnectivityManager.TYPE_WIFI);
}/**
* 获取MAC地址
*
* @param context
* @return*/
public staticString getMacAddress(Context context) {if (context == null) {return "";
}
String localMac= null;if(isWifiAvailable()) {
localMac=getWifiMacAddress(context);
}if (localMac != null && localMac.length() > 0) {
localMac= localMac.replace(":", "-").toLowerCase();returnlocalMac;
}
localMac=getMacFromCallCmd();if (localMac != null) {
localMac= localMac.replace(":", "-").toLowerCase();
}returnlocalMac;
}private staticString getWifiMacAddress(Context context) {
String localMac= null;try{
WifiManager wifi=(WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info=wifi.getConnectionInfo();if(wifi.isWifiEnabled()) {
localMac=info.getMacAddress();if (localMac != null) {
localMac= localMac.replace(":", "-").toLowerCase();returnlocalMac;
}
}
}catch(Exception e) {
e.printStackTrace();
}return null;
}/**
* 通过callCmd("busybox ifconfig","HWaddr")获取mac地址
*
* @attention 需要设备装有busybox工具
* @return Mac Address*/
private staticString getMacFromCallCmd() {
String result= "";
result= callCmd("busybox ifconfig", "HWaddr");if (result == null || result.length() <= 0) {return null;
}
DebugLog.v("tag", "cmd result :" +result);//对该行数据进行解析//例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
if (result.length() > 0 && result.contains("HWaddr") == true) {
String Mac= result.substring(result.indexOf("HWaddr") + 6,
result.length()- 1);if (Mac.length() > 1) {
result= Mac.replaceAll(" ", "");
}
}returnresult;
}public staticString callCmd(String cmd, String filter) {
String result= "";
String line= "";try{
Process proc=Runtime.getRuntime().exec(cmd);
InputStreamReaderis = newInputStreamReader(proc.getInputStream());
BufferedReader br= new BufferedReader(is);//执行命令cmd,只取结果中含有filter的这一行
while ((line = br.readLine()) != null
&& line.contains(filter) == false) {
}
result=line;
}catch(Exception e) {
e.printStackTrace();
}returnresult;
}/**
* 网络是否可用
*
* @param context
* @return*/
public staticboolean IsNetWorkEnable(Context context) {try{
ConnectivityManager connectivity=(ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);if (connectivity == null) {
ToastUtil.showMessage(context,"无法连接网络");return false;
}
NetworkInfo info=connectivity.getActiveNetworkInfo();if (info != null &&info.isConnected()) {//判断当前网络是否已经连接
if (info.getState() ==NetworkInfo.State.CONNECTED) {return true;
}
}
}catch(Exception e) {
e.printStackTrace();
}
ToastUtil.showMessage(context,"无法连接网络");return false;
}private static final int NETWORK_TYPE_UNAVAILABLE = -1;//private static final int NETWORK_TYPE_MOBILE = -100;
private static final int NETWORK_TYPE_WIFI = -101;private static final int NETWORK_CLASS_WIFI = -101;private static final int NETWORK_CLASS_UNAVAILABLE = -1;/** Unknown network class.*/
private static final int NETWORK_CLASS_UNKNOWN = 0;/** Class of broadly defined "2G" networks.*/
private static final int NETWORK_CLASS_2_G = 1;/** Class of broadly defined "3G" networks.*/
private static final int NETWORK_CLASS_3_G = 2;/** Class of broadly defined "4G" networks.*/
private static final int NETWORK_CLASS_4_G = 3;private static DecimalFormat df = new DecimalFormat("#.##");//适配低版本手机
/** Network type is unknown*/
public static final int NETWORK_TYPE_UNKNOWN = 0;/** Current network is GPRS*/
public static final int NETWORK_TYPE_GPRS = 1;/** Current network is EDGE*/
public static final int NETWORK_TYPE_EDGE = 2;/** Current network is UMTS*/
public static final int NETWORK_TYPE_UMTS = 3;/** Current network is CDMA: Either IS95A or IS95B*/
public static final int NETWORK_TYPE_CDMA = 4;/** Current network is EVDO revision 0*/
public static final int NETWORK_TYPE_EVDO_0 = 5;/** Current network is EVDO revision A*/
public static final int NETWORK_TYPE_EVDO_A = 6;/** Current network is 1xRTT*/
public static final int NETWORK_TYPE_1xRTT = 7;/** Current network is HSDPA*/
public static final int NETWORK_TYPE_HSDPA = 8;/** Current network is HSUPA*/
public static final int NETWORK_TYPE_HSUPA = 9;/** Current network is HSPA*/
public static final int NETWORK_TYPE_HSPA = 10;/** Current network is iDen*/
public static final int NETWORK_TYPE_IDEN = 11;/** Current network is EVDO revision B*/
public static final int NETWORK_TYPE_EVDO_B = 12;/** Current network is LTE*/
public static final int NETWORK_TYPE_LTE = 13;/** Current network is eHRPD*/
public static final int NETWORK_TYPE_EHRPD = 14;/** Current network is HSPA+*/
public static final int NETWORK_TYPE_HSPAP = 15;/**
* 格式化大小
*
* @param size
* @return*/
public static String formatSize(longsize) {
String unit= "B";float len =size;if (len > 900) {
len/=1024f;
unit= "KB";
}if (len > 900) {
len/=1024f;
unit= "MB";
}if (len > 900) {
len/=1024f;
unit= "GB";
}if (len > 900) {
len/=1024f;
unit= "TB";
}return df.format(len) +unit;
}public static String formatSizeBySecond(longsize) {
String unit= "B";float len =size;if (len > 900) {
len/=1024f;
unit= "KB";
}if (len > 900) {
len/=1024f;
unit= "MB";
}if (len > 900) {
len/=1024f;
unit= "GB";
}if (len > 900) {
len/=1024f;
unit= "TB";
}return df.format(len) + unit + "/s";
}public static String format(longsize) {
String unit= "B";float len =size;if (len > 1000) {
len/=1024f;
unit= "KB";if (len > 1000) {
len/=1024f;
unit= "MB";if (len > 1000) {
len/=1024f;
unit= "GB";
}
}
}return df.format(len) + "\n" + unit + "/s";
}/**
* 获取运营商
*
* @return*/
public staticString getProvider() {
String provider= "未知";try{
TelephonyManager telephonyManager=(TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);
String IMSI=telephonyManager.getSubscriberId();
Log.v("tag", "getProvider.IMSI:" +IMSI);if (IMSI == null) {if (TelephonyManager.SIM_STATE_READY ==telephonyManager
.getSimState()) {
Stringoperator =telephonyManager.getSimOperator();
Log.v("tag", "getProvider.operator:" + operator);if (operator != null) {if (operator.equals("46000")|| operator.equals("46002")|| operator.equals("46007")) {
provider= "中国移动";
}else if (operator.equals("46001")) {
provider= "中国联通";
}else if (operator.equals("46003")) {
provider= "中国电信";
}
}
}
}else{if (IMSI.startsWith("46000") || IMSI.startsWith("46002")|| IMSI.startsWith("46007")) {
provider= "中国移动";
}else if (IMSI.startsWith("46001")) {
provider= "中国联通";
}else if (IMSI.startsWith("46003")) {
provider= "中国电信";
}
}
}catch(Exception e) {
e.printStackTrace();
}returnprovider;
}/**
* 获取网络类型
*
* @return*/
public staticString getCurrentNetworkType() {int networkClass =getNetworkClass();
String type= "未知";switch(networkClass) {caseNETWORK_CLASS_UNAVAILABLE:
type= "无";break;caseNETWORK_CLASS_WIFI:
type= "Wi-Fi";break;caseNETWORK_CLASS_2_G:
type= "2G";break;caseNETWORK_CLASS_3_G:
type= "3G";break;caseNETWORK_CLASS_4_G:
type= "4G";break;caseNETWORK_CLASS_UNKNOWN:
type= "未知";break;
}returntype;
}private static int getNetworkClassByType(intnetworkType) {switch(networkType) {caseNETWORK_TYPE_UNAVAILABLE:returnNETWORK_CLASS_UNAVAILABLE;caseNETWORK_TYPE_WIFI:returnNETWORK_CLASS_WIFI;caseNETWORK_TYPE_GPRS:caseNETWORK_TYPE_EDGE:caseNETWORK_TYPE_CDMA:caseNETWORK_TYPE_1xRTT:caseNETWORK_TYPE_IDEN:returnNETWORK_CLASS_2_G;caseNETWORK_TYPE_UMTS:caseNETWORK_TYPE_EVDO_0:caseNETWORK_TYPE_EVDO_A:caseNETWORK_TYPE_HSDPA:caseNETWORK_TYPE_HSUPA:caseNETWORK_TYPE_HSPA:caseNETWORK_TYPE_EVDO_B:caseNETWORK_TYPE_EHRPD:caseNETWORK_TYPE_HSPAP:returnNETWORK_CLASS_3_G;caseNETWORK_TYPE_LTE:returnNETWORK_CLASS_4_G;default:returnNETWORK_CLASS_UNKNOWN;
}
}private static intgetNetworkClass() {int networkType =NETWORK_TYPE_UNKNOWN;try{
final NetworkInfo network=((ConnectivityManager) ConfigManager
.getContext()
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();if (network != null &&network.isAvailable()&&network.isConnected()) {int type =network.getType();if (type ==ConnectivityManager.TYPE_WIFI) {
networkType=NETWORK_TYPE_WIFI;
}else if (type ==ConnectivityManager.TYPE_MOBILE) {
TelephonyManager telephonyManager=(TelephonyManager) ConfigManager
.getContext().getSystemService(
Context.TELEPHONY_SERVICE);
networkType=telephonyManager.getNetworkType();
}
}else{
networkType=NETWORK_TYPE_UNAVAILABLE;
}
}catch(Exception ex) {
ex.printStackTrace();
}returngetNetworkClassByType(networkType);
}public staticString getWifiRssi() {int asu = 85;try{
final NetworkInfo network=((ConnectivityManager) ConfigManager
.getContext()
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();if (network != null &&network.isAvailable()&&network.isConnected()) {int type =network.getType();if (type ==ConnectivityManager.TYPE_WIFI) {
WifiManager wifiManager=(WifiManager) ConfigManager
.getContext()
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo=wifiManager.getConnectionInfo();if (wifiInfo != null) {
asu=wifiInfo.getRssi();
}
}
}
}catch(Exception e) {
e.printStackTrace();
}return asu + "dBm";
}public staticString getWifiSsid() {
String ssid= "";try{
final NetworkInfo network=((ConnectivityManager) ConfigManager
.getContext()
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();if (network != null &&network.isAvailable()&&network.isConnected()) {int type =network.getType();if (type ==ConnectivityManager.TYPE_WIFI) {
WifiManager wifiManager=(WifiManager) ConfigManager
.getContext()
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo=wifiManager.getConnectionInfo();if (wifiInfo != null) {
ssid=wifiInfo.getSSID();if (ssid == null) {
ssid= "";
}
ssid= ssid.replaceAll("\"", "");
}
}
}
}catch(Exception e) {
e.printStackTrace();
}returnssid;
}/**
* 检查sim卡状态
*
* @param ctx
* @return*/
public staticboolean checkSimState() {
TelephonyManager tm=(TelephonyManager) ConfigManager.getContext()
.getSystemService(Context.TELEPHONY_SERVICE);if (tm.getSimState() ==TelephonyManager.SIM_STATE_ABSENT|| tm.getSimState() ==TelephonyManager.SIM_STATE_UNKNOWN) {return false;
}return true;
}/**
* 获取imei*/
public staticString getImei() {
TelephonyManager mTelephonyMgr=(TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);
String imei=mTelephonyMgr.getDeviceId();if (imei == null) {
imei= "000000000000000";
}returnimei;
}public staticString getPhoneImsi() {
TelephonyManager mTelephonyMgr=(TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);returnmTelephonyMgr.getSubscriberId();
}public staticCellInfo getNetInfo() {
CellInfo info= newCellInfo();try{
TelephonyManager mTelephonyManager=(TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);
Stringoperator =mTelephonyManager.getNetworkOperator();if (operator != null) {/** 通过operator获取 MCC 和MNC*/
if (operator.length() > 3) {
String mcc= operator.substring(0, 3);
String mnc= operator.substring(3);
info.setMcc(mcc);
info.setMnc(mnc);
}
}int lac = 0;int cellId = 0;int phoneType =mTelephonyManager.getPhoneType();if (phoneType ==TelephonyManager.PHONE_TYPE_GSM) {
GsmCellLocation location=(GsmCellLocation) mTelephonyManager
.getCellLocation();/** 通过GsmCellLocation获取中国移动和联通 LAC 和cellID*/lac=location.getLac();
cellId=location.getCid();
}else if (phoneType ==TelephonyManager.PHONE_TYPE_CDMA) {
CdmaCellLocation location=(CdmaCellLocation) mTelephonyManager
.getCellLocation();
lac=location.getNetworkId();
cellId=location.getBaseStationId();
cellId/= 16;
}if (lac == 0 || cellId == 0) {
List infos =mTelephonyManager
.getNeighboringCellInfo();int lc = 0;int ci = 0;int rssi = 0;for(NeighboringCellInfo cell : infos) {//根据邻区总数进行循环
if (lc == 0 || ci == 0) {
lc=cell.getLac();
ci=cell.getCid();
rssi=cell.getRssi();
}//sb.append(" LAC : " + info.getLac());// //取出当前邻区的LAC//sb.append(" CID : " + info.getCid());// //取出当前邻区的CID//sb.append(" BSSS : " + (-113 + 2 * info.getRssi()) +//"\n");//获取邻区基站信号强度
}
rssi= -113 + 2 *rssi;
}
}catch(Exception e) {
e.printStackTrace();
}returninfo;
}
}