**

Android获取当前WiFi的MAC地址

**

package com.dogness.platform.utils;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.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.util.Enumeration;/** * Android获取当前WiFi的MAC地址-适配所有版本 * Created by dcg on 2019/8/26. */public class WifiMacUtils {    public static String getMac(Context mContext) {        String strMac = null;        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {            AppLog.Loge( "6.0以下");            strMac = getLocalMacAddressFromWifiInfo(mContext.getApplicationContext());            return strMac;        } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N                && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            AppLog.Loge("6.0以上7.0以下");            strMac = getMacAddress(mContext.getApplicationContext());            return strMac;        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {            AppLog.Loge("7.0以上");            if (!TextUtils.isEmpty(getMacAddress())) {                Log.e("=====", "7.0以上1");                strMac = getMacAddress();                return strMac;            } else if (!TextUtils.isEmpty(getMachineHardwareAddress())) {                AppLog.Loge( "7.0以上2");                strMac = getMachineHardwareAddress();                return strMac;            } else {                AppLog.Loge( "7.0以上3");                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;    }    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 "";    }    /**     * 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 loadFileAsString(String fileName) throws Exception {        FileReader reader = new FileReader(fileName);        String text = loadReaderAsString(reader);        reader.close();        return text;    }    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();    }    /**     * 根据IP地址获取MAC地址     *     * @return     */    public static String getMacAddress() {        String strMacAddr = null;        try {            // 获得IpD地址            InetAddress ip = getLocalInetAddress();            byte[] b = NetworkInterface.getByInetAddress(ip)                    .getHardwareAddress();            StringBuffer buffer = new StringBuffer();            for (int i = 0; i < b.length; i++) {                if (i != 0) {                    buffer.append(':');                }                String str = Integer.toHexString(b[i] & 0xFF);                buffer.append(str.length() == 1 ? 0 + str : str);            }            strMacAddr = buffer.toString().toUpperCase();        } catch (Exception e) {        }        return strMacAddr;    }    /**     * 获取移动设备本地IP     *     * @return     */    private static InetAddress getLocalInetAddress() {        InetAddress ip = null;        try {            // 列举            Enumeration en_netInterface = NetworkInterface                    .getNetworkInterfaces();            while (en_netInterface.hasMoreElements()) {// 是否还有元素                NetworkInterface ni = (NetworkInterface) en_netInterface                        .nextElement();// 得到下一个元素                Enumeration en_ip = ni.getInetAddresses();// 得到一个ip地址的列举                while (en_ip.hasMoreElements()) {                    ip = en_ip.nextElement();                    if (!ip.isLoopbackAddress()                            && ip.getHostAddress().indexOf(":") == -1)                        break;                    else                        ip = null;                }                if (ip != null) {                    break;                }            }        } catch (SocketException e) {            e.printStackTrace();        }        return ip;    }    /**     * 获取本地IP     *     * @return     */    private static String getLocalIpAddress() {        try {            for (Enumeration en = NetworkInterface                    .getNetworkInterfaces(); en.hasMoreElements(); ) {                NetworkInterface intf = en.nextElement();                for (Enumeration enumIpAddr = intf                        .getInetAddresses(); enumIpAddr.hasMoreElements(); ) {                    InetAddress inetAddress = enumIpAddr.nextElement();                    if (!inetAddress.isLoopbackAddress()) {                        return inetAddress.getHostAddress().toString();                    }                }            }        } catch (SocketException ex) {            ex.printStackTrace();        }        return null;    }    /**     * android 7.0及以上 (2)扫描各个网络接口获取mac地址     *     */    /**     * 获取设备HardwareAddress地址     *     * @return     */    public static String getMachineHardwareAddress() {        Enumeration 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;    }    /***     * 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();    }    /**     * 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 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;    }}

更多相关文章

  1. Android获取设备ID号
  2. android几种开源项目源码地址
  3. android sdk 下载地址
  4. Android开发--Layout元素
  5. 如何在Android和iOS设备上录制游戏?
  6. adb通过TCP/IP来调试Android设备
  7. Android 支持不同(本地化、屏幕、版本)设备

随机推荐

  1. 三分钟秒懂BIO/NIO/AIO区别?
  2. 你在 Python 中常常写的 with..as.. 到底
  3. 多文件上传-MVC依赖注入-容器管理依赖对
  4. MYSQL数据库CURD中常用操作命令汇总及代
  5. Python中的arange是什么?和range有什么不
  6. kafka查看版本
  7. 用户管理加登录验证、注册、管理权限
  8. Ajax数据异步加载、无刷新分页、编辑与删
  9. 从数组中移除元素,要求时间复杂度为O(N)空
  10. xxl-job源码分析与架构介绍