獲取藍牙地址的工具類,包括wifi,Android6.0以上

import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.Reader;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

/**

  • Created by Administrator on 2019/9/29.
    */

public class Utils {
//獲取mac地址
public static String getMac(Context context) {

    String strMac = null;

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        ////Log.e("=====", "6.0以下");
        //Toast.makeText(context, "6.0以下", Toast.LENGTH_SHORT).show();
        strMac = getLocalMacAddressFromWifiInfo(context);
        return strMac;
    } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N
            && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Log.e("=====", "6.0以上7.0以下");
        // Toast.makeText(context, "6.0以上7.0以下", Toast.LENGTH_SHORT).show();
        strMac = getMacAddress(context);
        return strMac;
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        //  Log.e("=====", "7.0以上");
        if (!TextUtils.isEmpty(getMacAddress(context))) {
            //  Log.e("=====", "7.0以上1");
            //  Toast.makeText(context, "7.0以上1", Toast.LENGTH_SHORT).show();
            strMac = getMacAddress(context);
            return strMac;
        } else if (!TextUtils.isEmpty(getMachineHardwareAddress())) {
            // Log.e("=====", "7.0以上2");
            // Toast.makeText(context, "7.0以上2", Toast.LENGTH_SHORT).show();
            //   strMac = getMachineHardwareAddress();
            strMac=getMacFromHardware();
            return strMac;
        } else {
            //  Log.e("=====", "7.0以上3");
            //  Toast.makeText(context, "7.0以上3", Toast.LENGTH_SHORT).show();
            strMac = getLocalMacAddressFromBusybox();
            return strMac;
        }
    }
    return "02:00:00:00:00:00";
}
/**
 * 根據wifi信息獲取本地mac
 *
 * @param context
 * @return
 */
public static String getLocalMacAddressFromWifiInfo(Context context) {
    WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    WifiInfo winfo = wifi.getConnectionInfo();
    String mac = winfo.getMacAddress();
    return mac;
}
/**
 * android 6.0及以上、7.0以下 獲取mac地址
 *
 * @param context
 * @return
 */
public static String getMacAddress(Context context) {

    // 如果是6.0以下,直接通過wifimanager獲取
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        String macAddress0 = getMacAddress0(context);
        if (!TextUtils.isEmpty(macAddress0)) {
            return macAddress0;
        }
    }
    String str = "";
    String macSerial = "";
    try {
        Process pp = Runtime.getRuntime().exec(
                "cat /sys/class/net/wlan0/address");
        InputStreamReader ir = new InputStreamReader(pp.getInputStream());
        LineNumberReader input = new LineNumberReader(ir);
        for (; null != str; ) {
            str = input.readLine();
            if (str != null) {
                macSerial = str.trim();// 去空格
                break;
            }
        }
    } catch (Exception ex) {
        Log.e("----->" + "NetInfoManager", "getMacAddress:" + ex.toString());
    }
    if (macSerial == null || "".equals(macSerial)) {
        try {
            return loadFileAsString("/sys/class/net/eth0/address")
                    .toUpperCase().substring(0, 17);
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("----->" + "NetInfoManager",
                    "getMacAddress:" + e.toString());
        }

    }
    return macSerial;
}

/**
 * android 7.0及以上 (2)掃描各個網絡接口獲取mac地址
 *
 */
/**
 * 獲取設備HardwareAddress地址
 *
 * @return
 */
public static String getMachineHardwareAddress() {
    Enumeration<NetworkInterface> interfaces = null;
    try {
        interfaces = NetworkInterface.getNetworkInterfaces();
    } catch (SocketException e) {
        e.printStackTrace();
    }
    String hardWareAddress = null;
    NetworkInterface iF = null;
    if (interfaces == null) {
        return null;
    }
    while (interfaces.hasMoreElements()) {
        iF = interfaces.nextElement();
        try {
            hardWareAddress = bytesToString(iF.getHardwareAddress());
            if (hardWareAddress != null)
                break;
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
    return hardWareAddress;
}

/**
 * 遍歷循環所有的網絡接口,找到接口是 wlan0
 * 必須的權限 <uses-permission android:name="android.permission.INTERNET" />
 *
 * @return
 */
private static String getMacFromHardware() {
    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 e) {
        e.printStackTrace();
    }
    return "02:00:00:00:00:00";
}

/**
 * android 7.0及以上 (3)通過busybox獲取本地存儲的mac地址
 *
 */

/**
 * 根據busybox獲取本地Mac
 *
 * @return
 */
public static String getLocalMacAddressFromBusybox() {
    String result = "";
    String Mac = "";
    result = callCmd("busybox ifconfig", "HWaddr");
    // 如果返回的result == null,則說明網絡不可取
    if (result == null) {
        return "網絡異常";
    }
    // 對該行數據進行解析
    // 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
    if (result.length() > 0 && result.contains("HWaddr") == true) {
        Mac = result.substring(result.indexOf("HWaddr") + 6,
                result.length() - 1);
        result = Mac;
    }
    return result;
}

private static String getMacAddress0(Context context) {
    if (isAccessWifiStateAuthorized(context)) {
        WifiManager wifiMgr = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = null;
        try {
            wifiInfo = wifiMgr.getConnectionInfo();
            return wifiInfo.getMacAddress();
        } catch (Exception e) {
            Log.e("----->" + "NetInfoManager",
                    "getMacAddress0:" + e.toString());
        }

    }
    return "";

}

private static String loadFileAsString(String fileName) throws Exception {
    Reader reader = new FileReader(fileName);
    String text = loadReaderAsString(reader);
    reader.close();
    return text;
}

/***
 * byte轉爲String
 *
 * @param bytes
 * @return
 */
private static String bytesToString(byte[] bytes) {
    if (bytes == null || bytes.length == 0) {
        return null;
    }
    StringBuilder buf = new StringBuilder();
    for (byte b : bytes) {
        buf.append(String.format("%02X:", b));
    }
    if (buf.length() > 0) {
        buf.deleteCharAt(buf.length() - 1);
    }
    return buf.toString();
}

private 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);

        while ((line = br.readLine()) != null
                && line.contains(filter) == false) {
            result += line;
        }

        result = line;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

/**
 * Check whether accessing wifi state is permitted
 *
 * @param context
 * @return
 */
private static boolean isAccessWifiStateAuthorized(Context context) {
    if (PackageManager.PERMISSION_GRANTED == context
            .checkCallingOrSelfPermission("android.permission.ACCESS_WIFI_STATE")) {
        Log.e("----->" + "NetInfoManager", "isAccessWifiStateAuthorized:"
                + "access wifi state is enabled");
        return true;
    } else
        return false;
}

private static String loadReaderAsString(Reader reader) throws Exception {
    StringBuilder builder = new StringBuilder();
    char[] buffer = new char[4096];
    int readLength = reader.read(buffer);
    while (readLength >= 0) {
        builder.append(buffer, 0, readLength);
        readLength = reader.read(buffer);
    }
    return builder.toString();
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章