安卓Android 获取mac地址及sn

1、获取设备mac地址的工具类MacUtil,首先获取有线mac地址,如可获取有线mac地址则使用有线mac地址,否则使用无线mac地址。

非系统应用必须添加对应权限,并获取了权限后才可调用,否则会闪退

java 复制代码
import static android.content.Context.WIFI_SERVICE;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.text.TextUtils;
import android.util.Log;

import java.net.NetworkInterface;
import java.util.Enumeration;

public class MacUtil {
    private static final String TAG = "MacUtil";

    /**
     * 获取mac地址 如可获取有线mac地址则使用有线mac地址,否则使用无线mac地址
     *
     * @param context 上下文
     * @return max
     */
    public static String getMac(Context context) {
        if (context == null) {
            Log.e(TAG,"getMac --  context is null");
            return "";
        }
        String ethMac = getEthernetMac();
        if (TextUtils.isEmpty(ethMac)) {
            Log.i(TAG,"getMac --  ethMac is empty.getWifiMac");
            // 返回无线mac地址
            return getWifiMac(context.getApplicationContext());
        } else {
            // 返回有线mac地址
            return ethMac;
        }
    }

    /**
     * 获取有线MAC地址
     */
    public static String getEthernetMac() {
        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface netWork = interfaces.nextElement();
                if (!netWork.getName().equals("eth0")) {
                    continue;
                }
                byte[] macBytes = netWork.getHardwareAddress();
                if (macBytes == null) {
                    Log.w(TAG,"getEthernetMac --  macBytes is null");
                    return "";
                }
                StringBuilder res1 = new StringBuilder();
                for (byte b : macBytes) {
                    res1.append(String.format("%02X:", b));
                }
                if (!TextUtils.isEmpty(res1)) {
                    res1.deleteCharAt(res1.length() - 1);
                }
                return res1.toString();
            }
        } catch (Exception e) {
            Log.e(TAG,"getEthernetMac --  Exception:" + e.getMessage());
        }
        return "";
    }

    /**
     * 获取无线MAC地址(备注:非系统应用需要添加对应权限,否则运行闪退!)
     *
     * @param context 上下文
     * @return 无线MAC地址
     */
    @SuppressLint({"MissingPermission", "HardwareIds"})
    public static String getWifiMac(Context context) {
        WifiManager wifi = (WifiManager) context.getSystemService(WIFI_SERVICE);
        return wifi.getConnectionInfo().getMacAddress();
    }
}

调用方式:

java 复制代码
String mac = MacUtil.getMac(this);

2、获取sn,非系统应用也需要添加对应权限

java 复制代码
    /**
     * 获取设备序列号SN(备注:非系统应用需要添加对应权限,否则运行闪退!)
     *
     * @return SN序列号
     */
    @SuppressLint("MissingPermission")
    public static String getSn() {
        if (!TextUtils.isEmpty(sCacheSn)) {
            return sCacheSn;
        }
        // 使用属性值获取SN号发现在某些设备上获取不到,现采用原生获取方式
        sCacheSn = android.os.Build.getSerial();
        return sCacheSn;
    }
相关推荐
游戏开发爱好者813 小时前
抓包工具有哪些?代理抓包、数据流抓包、拦截转发工具
android·ios·小程序·https·uni-app·iphone·webview
StarShip13 小时前
Android system_server进程介绍
android
StarShip13 小时前
Android Context 的 “上下文”
android
成都大菠萝13 小时前
2-6-1 快速掌握Kotlin-语言的接口定义
android
李小轰_Rex13 小时前
纯算法AEC:播录并行场景的回声消除实战笔记
android·音视频开发
ok406lhq14 小时前
unity游戏调用SDK支付返回游戏会出现画面移位的问题
android·游戏·unity·游戏引擎·sdk
梁辰兴14 小时前
计算机网络基础:以太网的 MAC 层
网络·计算机网络·macos·计算机·mac·以太网·梁辰兴
成都大菠萝15 小时前
2-2-2 快速掌握Kotlin-函数&Lambda
android
成都大菠萝15 小时前
2-1-1 快速掌握Kotlin-kotlin中变量&语句&表达式
android
CC.GG15 小时前
【C++】STL----封装红黑树实现map和set
android·java·c++