package com.android.hcframe.netdisc.util; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.List; import android.content.ComponentName;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.support.v4.content.ContextCompat;
import android.telephony.CellInfo;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.telephony.cdma.CdmaCellLocation;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log; public class NetWorkUtil { public static boolean isWifiAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected() && networkInfo
.getType() == ConnectivityManager.TYPE_WIFI);
} /**
* 获取MAC地址
*
* @param context
* @return
*/
public static String getMacAddress(Context context) {
if (context == null) {
return "";
} String localMac = null;
if (isWifiAvailable(context)) {
localMac = getWifiMacAddress(context);
} if (localMac != null && localMac.length() > ) {
localMac = localMac.replace(":", "-").toLowerCase();
return localMac;
} localMac = getMacFromCallCmd();
if (localMac != null) {
localMac = localMac.replace(":", "-").toLowerCase();
} return localMac;
} private static String 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();
return localMac;
}
} } catch (Exception e) {
e.printStackTrace();
} return null;
} /**
* 通过callCmd("busybox ifconfig","HWaddr")获取mac地址
*
* @attention 需要设备装有busybox工具
* @return Mac Address
*/
private static String getMacFromCallCmd() {
String result = "";
result = callCmd("busybox ifconfig", "HWaddr"); if (result == null || result.length() <= ) {
return null;
} Log.v("tag", "cmd result : " + result); // 对该行数据进行解析
// 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
if (result.length() > && result.contains("HWaddr") == true) {
String Mac = result.substring(result.indexOf("HWaddr") + ,
result.length() - );
if (Mac.length() > ) {
result = Mac.replaceAll(" ", "");
}
} return result;
} public static String callCmd(String cmd, String filter) {
String result = "";
String line = "";
try {
Process proc = Runtime.getRuntime().exec(cmd);
InputStreamReader is = new InputStreamReader(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();
}
return result;
} /**
* 网络是否可用
*
* @param context
* @return
*/
public static boolean 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 = -;
// private static final int NETWORK_TYPE_MOBILE = -100;
private static final int NETWORK_TYPE_WIFI = -; private static final int NETWORK_CLASS_WIFI = -;
private static final int NETWORK_CLASS_UNAVAILABLE = -;
/** Unknown network class. */
private static final int NETWORK_CLASS_UNKNOWN = ;
/** Class of broadly defined "2G" networks. */
private static final int NETWORK_CLASS_2_G = ;
/** Class of broadly defined "3G" networks. */
private static final int NETWORK_CLASS_3_G = ;
/** Class of broadly defined "4G" networks. */
private static final int NETWORK_CLASS_4_G = ; private static DecimalFormat df = new DecimalFormat("#.##"); // 适配低版本手机
/** Network type is unknown */
public static final int NETWORK_TYPE_UNKNOWN = ;
/** Current network is GPRS */
public static final int NETWORK_TYPE_GPRS = ;
/** Current network is EDGE */
public static final int NETWORK_TYPE_EDGE = ;
/** Current network is UMTS */
public static final int NETWORK_TYPE_UMTS = ;
/** Current network is CDMA: Either IS95A or IS95B */
public static final int NETWORK_TYPE_CDMA = ;
/** Current network is EVDO revision 0 */
public static final int NETWORK_TYPE_EVDO_0 = ;
/** Current network is EVDO revision A */
public static final int NETWORK_TYPE_EVDO_A = ;
/** Current network is 1xRTT */
public static final int NETWORK_TYPE_1xRTT = ;
/** Current network is HSDPA */
public static final int NETWORK_TYPE_HSDPA = ;
/** Current network is HSUPA */
public static final int NETWORK_TYPE_HSUPA = ;
/** Current network is HSPA */
public static final int NETWORK_TYPE_HSPA = ;
/** Current network is iDen */
public static final int NETWORK_TYPE_IDEN = ;
/** Current network is EVDO revision B */
public static final int NETWORK_TYPE_EVDO_B = ;
/** Current network is LTE */
public static final int NETWORK_TYPE_LTE = ;
/** Current network is eHRPD */
public static final int NETWORK_TYPE_EHRPD = ;
/** Current network is HSPA+ */
public static final int NETWORK_TYPE_HSPAP = ; /**
* 格式化大小
*
* @param size
* @return
*/
public static String formatSize(long size) {
String unit = "B";
float len = size;
if (len > ) {
len /= 1024f;
unit = "KB";
}
if (len > ) {
len /= 1024f;
unit = "MB";
}
if (len > ) {
len /= 1024f;
unit = "GB";
}
if (len > ) {
len /= 1024f;
unit = "TB";
}
return df.format(len) + unit;
} public static String formatSizeBySecond(long size) {
String unit = "B";
float len = size;
if (len > ) {
len /= 1024f;
unit = "KB";
}
if (len > ) {
len /= 1024f;
unit = "MB";
}
if (len > ) {
len /= 1024f;
unit = "GB";
}
if (len > ) {
len /= 1024f;
unit = "TB";
}
return df.format(len) + unit + "/s";
} public static String format(long size) {
String unit = "B";
float len = size;
if (len > ) {
len /= 1024f;
unit = "KB";
if (len > ) {
len /= 1024f;
unit = "MB";
if (len > ) {
len /= 1024f;
unit = "GB";
}
}
}
return df.format(len) + "\n" + unit + "/s";
} /**
* 获取运营商
*
* @return
*/
public static String getProvider(Context context) {
String provider = "未知";
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String IMSI = telephonyManager.getSubscriberId();
Log.v("tag", "getProvider.IMSI:" + IMSI);
if (IMSI == null) {
if (TelephonyManager.SIM_STATE_READY == telephonyManager
.getSimState()) {
String operator = telephonyManager.getSimOperator();
Log.v("tag", "getProvider.operator:" + operator);
if (operator != null) {
if (operator.equals("")
|| operator.equals("")
|| operator.equals("")) {
provider = "中国移动";
} else if (operator.equals("")) {
provider = "中国联通";
} else if (operator.equals("")) {
provider = "中国电信";
}
}
}
} else {
if (IMSI.startsWith("") || IMSI.startsWith("")
|| IMSI.startsWith("")) {
provider = "中国移动";
} else if (IMSI.startsWith("")) {
provider = "中国联通";
} else if (IMSI.startsWith("")) {
provider = "中国电信";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return provider;
} /**
* 获取网络类型
*
* @return
*/
public static String getCurrentNetworkType(Context context) {
int networkClass = getNetworkClass(context);
String type = "未知";
switch (networkClass) {
case NETWORK_CLASS_UNAVAILABLE:
type = "无";
break;
case NETWORK_CLASS_WIFI:
type = "Wi-Fi";
break;
case NETWORK_CLASS_2_G:
type = "2G";
break;
case NETWORK_CLASS_3_G:
type = "3G";
break;
case NETWORK_CLASS_4_G:
type = "4G";
break;
case NETWORK_CLASS_UNKNOWN:
type = "未知";
break;
}
return type;
} private static int getNetworkClassByType(int networkType) {
switch (networkType) {
case NETWORK_TYPE_UNAVAILABLE:
return NETWORK_CLASS_UNAVAILABLE;
case NETWORK_TYPE_WIFI:
return NETWORK_CLASS_WIFI;
case NETWORK_TYPE_GPRS:
case NETWORK_TYPE_EDGE:
case NETWORK_TYPE_CDMA:
case NETWORK_TYPE_1xRTT:
case NETWORK_TYPE_IDEN:
return NETWORK_CLASS_2_G;
case NETWORK_TYPE_UMTS:
case NETWORK_TYPE_EVDO_0:
case NETWORK_TYPE_EVDO_A:
case NETWORK_TYPE_HSDPA:
case NETWORK_TYPE_HSUPA:
case NETWORK_TYPE_HSPA:
case NETWORK_TYPE_EVDO_B:
case NETWORK_TYPE_EHRPD:
case NETWORK_TYPE_HSPAP:
return NETWORK_CLASS_3_G;
case NETWORK_TYPE_LTE:
return NETWORK_CLASS_4_G;
default:
return NETWORK_CLASS_UNKNOWN;
}
} private static int getNetworkClass(Context context) {
int networkType = NETWORK_TYPE_UNKNOWN;
try {
final NetworkInfo network = ((ConnectivityManager) context
.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) context.getSystemService(
Context.TELEPHONY_SERVICE);
networkType = telephonyManager.getNetworkType();
}
} else {
networkType = NETWORK_TYPE_UNAVAILABLE;
} } catch (Exception ex) {
ex.printStackTrace();
}
return getNetworkClassByType(networkType); } public static String getWifiRssi(Context context) {
int asu = ;
try {
final NetworkInfo network = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (network != null && network.isAvailable()
&& network.isConnected()) {
int type = network.getType();
if (type == ConnectivityManager.TYPE_WIFI) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
asu = wifiInfo.getRssi();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return asu + "dBm";
} public static String getWifiSsid(Context context) {
String ssid = "";
try {
final NetworkInfo network = ((ConnectivityManager)context
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (network != null && network.isAvailable()
&& network.isConnected()) {
int type = network.getType();
if (type == ConnectivityManager.TYPE_WIFI) {
WifiManager wifiManager = (WifiManager)context
.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();
}
return ssid;
} /**
* 检查sim卡状态
*
* @param
* @return
*/
public static boolean checkSimState(Context context) {
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT
|| tm.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) {
return false;
} return true;
} /**
* 获取imei
*/
public static String getImei(Context context) {
TelephonyManager mTelephonyMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String imei = mTelephonyMgr.getDeviceId();
if (imei == null) {
imei = "";
}
return imei;
} public static String getPhoneImsi(Context context) {
TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return mTelephonyMgr.getSubscriberId();
} // public static CellInfo getNetInfo(Context context) {
// CellInfo info = new CellInfo();
// try {
// TelephonyManager mTelephonyManager = (TelephonyManager) context
// .getSystemService(Context.TELEPHONY_SERVICE);
// String operator = 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<NeighboringCellInfo> 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();
// }
// return info;
// } }