安卓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;
    }
相关推荐
Yang-Never1 小时前
Open GL ES->EGL渲染环境、数据、引擎、线程的创建
android·java·开发语言·kotlin·android studio
城东米粉儿1 小时前
为ViewGroup 对象的布局更改添加动画效果 笔记
android
松☆1 小时前
OpenHarmony + Flutter 多语言与国际化(i18n)深度适配指南:一套代码支持中英俄等 10+ 语种
android·javascript·flutter
_李小白1 小时前
【Android FrameWork】第十八天:Binder服务
android·microsoft·binder
urkay-1 小时前
Android 全局修改设备的语言设置
android·xml·java·kotlin·iphone
飞火流星020271 小时前
MacOS 12(Monterey )PG安装通关指导
macos·postgresql16·mac安装pg·mac brew安装pg16
javaGHui1 小时前
安卓传感器横竖屏切换
android·经验分享·笔记
用户69371750013841 小时前
21.Kotlin 接口:接口 (Interface):抽象方法、属性与默认实现
android·后端·kotlin
QING6182 小时前
Jetpack Compose 中 Flow 收集详解 —— 新手指南
android·kotlin·android jetpack