最近在做数据上报功能,其中获取网络连接方式的方法在这里总结下。
话不多说,上代码。
一、获取wifi和数据网络的方式。
public static String getNetStatus(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager == null) {
return NETWORK_NONE;
}
NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();
if (activeNetInfo == null || !activeNetInfo.isAvailable()) {
return NETWORK_NONE;
}
// 判断是不是连接的是不是wifi
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (null != wifiInfo) {
NetworkInfo.State state = wifiInfo.getState();
if (null != state) {
if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
return NETWORK_WIFI;
}
}
}
// 如果不是wifi,则判断当前连接的是运营商的哪种网络2g、3g、4g等
NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (null != networkInfo) {
NetworkInfo.State state = networkInfo.getState();
String strSubTypeName = networkInfo.getSubtypeName();
if (null != state) {
if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
switch (activeNetInfo.getSubtype()) {
//如果是2g类型
case TelephonyManager.NETWORK_TYPE_GPRS: // 联通2g
case TelephonyManager.NETWORK_TYPE_CDMA: // 电信2g
case TelephonyManager.NETWORK_TYPE_EDGE: // 移动2g
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return NETWORK_2G;
//如果是3g类型
case TelephonyManager.NETWORK_TYPE_EVDO_A: // 电信3g
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
return NETWORK_3G;
//如果是4g类型
case TelephonyManager.NETWORK_TYPE_LTE:
return NETWORK_4G;
default:
if (strSubTypeName.equalsIgnoreCase("TD-SCDMA") || strSubTypeName.equalsIgnoreCase("WCDMA") || strSubTypeName.equalsIgnoreCase("CDMA2000")) {
return NETWORK_3G;
} else {
return strSubTypeName;
}
}
}
}
}
return NETWORK_NONE;
}
二、获取有线网络和wifi的方式
private String getNetStatus(Context context) {
int networkType;
final ConnectivityManager connectivityManager= (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
networkType=networkInfo.getType();
Loger.d(TAG, "network type:"+networkType);
if(networkType == ConnectivityManager.TYPE_WIFI){
return "wifi";
}else if((networkType == ConnectivityManager.TYPE_ETHERNET)){
return "ethernet";
}else{
return "wifi";
}
}
三、获取wifi信息,以及wifi连接
//权限
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.WAKE_LOCK
//wifi对象
WifiManager mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
//开关wifi
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
} else {
wifiManager.setWifiEnabled(true);
}
//wifi信息
if (mWifi.isWifiEnabled()) {
WifiInfo wifiInfo = mWifi.getConnectionInfo();
String netName = wifiInfo.getSSID(); //获取被连接网络的名称
String netMac = wifiInfo.getBSSID(); //获取被连接网络的mac地址
String localMac = wifiInfo.getMacAddress();// 获得本机的MAC地址
}
四、获取wifi mac地址
//第一种方式
WifiManager wifiManager=(WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo=wifiManager.getConnectionInfo();
String mac=wifiInfo.getMacAddress();
//第二种方式
public static String getMacAddr() {
try {
return loadFileAsString("/sys/class/net/wlan0/address")
.toUpperCase().substring(0, 17);
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
private static String loadFileAsString(String filePath)
throws java.io.IOException {
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[1024];
int numRead = 0;
while ((numRead = reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
}
reader.close();
return fileData.toString();
}
//第三种方式
NetworkInterface networkInterface = NetworkInterface.getByName("wlan0");
return ConvertMacAddressBytesToString(networkInterface.getHardwareAddress());
//第四种方式
public static String getMacAddr() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:",b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
}
return "02:00:00:00:00:00";
}
兼容实例
/**
* Android 6.0 之前(不包括6.0)获取mac地址
* 必须的权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
* @param context * @return
*/
private static String getMacDefault(Context context) {
String mac = "";
if (context == null) {
return mac;
}
WifiManager wifi = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = null;
try {
info = wifi.getConnectionInfo();
} catch (Exception e) {
e.printStackTrace();
}
if (info == null) {
return null;
}
mac = info.getMacAddress();
if (!TextUtils.isEmpty(mac)) {
mac = mac.toUpperCase(Locale.ENGLISH);
}
return mac;
}
/**
* Android 6.0-Android 7.0 获取mac地址
*/
private static String getMacAddress() {
String macSerial = null;
String str = "";
try {
Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address");
InputStreamReader ir = new InputStreamReader(pp.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
while (null != str) {
str = input.readLine();
if (str != null) {
macSerial = str.trim();//去空格
break;
}
}
} catch (IOException ex) {
// 赋予默认值
ex.printStackTrace();
}
return macSerial;
}
/**
* Android 7.0之后获取Mac地址
* 遍历循环所有的网络接口,找到接口是 wlan0
* 必须的权限 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
* @return
*/
private static String getMacFromHardware() {
String wlan0Mac = null;
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) {
continue;
}
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
Loger.e(TAG, nif.getName() + " getHardwareAddress null.");
return null;
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:", b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
wlan0Mac = res1.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return wlan0Mac;
}
/**
* 获取mac地址(适配所有Android版本)
* @return
*/
private String getWlan0Mac(Context mContext){
String mac = "";
Log.d(TAG, "getWlan0Mac: once start");
mac = getMacDefault(mContext);
if (StringUtils.isNullOrEmpty(mac) || mac.equals("02:00:00:00:00:00")) {
Log.d(TAG, "getMacDefault: is null");
mac = getMacAddress();
}
if (StringUtils.isNullOrEmpty(mac) || mac.equals("02:00:00:00:00:00")) {
Log.d(TAG, "getMacAddress: is null");
mac = getMacFromHardware();
}
Log.d(TAG, "getWlan0Mac: end");
return mac;
}
五、根据淘宝网返回获取位置信息
package com.android.vps.basic.protocol;
import com.android.vps.basic.business.AreaInfo;
import com.android.vpsc.publicapi.Loger;
import com.google.gson.Gson;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class TaobaoClient {
private static TaobaoClient instance;
private AreaInfo mAreaInfo = null;
private String TAG = "TaobaoClient";
private static final String TAOBAO_URL = "http://ip.taobao.com/service/getIpInfo.php?ip=myip";
private TaobaoClient(){}
public synchronized static TaobaoClient getInstance() {
if (null == instance) {
instance = new TaobaoClient();
}
return instance;
}
public AreaInfo getAreaInfo() {
synchronized (this) {
if (null != mAreaInfo) {
return mAreaInfo;
}
try {
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0")
.url(TAOBAO_URL).build();
Response response = httpClient.newCall(request).execute();
if (response.code() != 200) {
Loger.e(TAG, "got responsecode " + response.code() + " from taobao.");
return null;
}
String json = response.body().string();
Loger.d(TAG, "taobao reply: " + json);
mAreaInfo = new Gson().fromJson(json, AreaInfo.class);
return mAreaInfo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
}
网上这类资料很多,博客写下来的目的是,方便自己查阅。以后网络连接可能也会补充到这个博客中来。