获取android一体机的Mac地址

引言

最近在做一个医院专家介绍的网页展示,说起来没什么难度。很简单的一个东西,但是有一点把我恶心到了,前端给我的ip地址中需要拼接mac地址。本以为没什么难度,可以还是被坑了一把。

获取Mac

本来一开始,也没觉得是回事。无外乎就是获取mac,照着很多人通俗的做法就是使用wifiManager这个方法。

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
mac = wifiManager.getConnectionInfo().getMacAddress();

很简单就两句话,但是需要注意的一点是getSystemService()这个方法。在android studio2.3以后一定要在这个方法前添加getApplicationContext()这个方法,否则编译可以成功运动,但是打包Apk的时候就会报错。
好了接下来说一下我的问题,这个方法虽然说可以获取到mac倒是必须是在连接wifi的前提下才可以,不然的话就会报null。然而,我这里做的android盒子程序是要装的盒子上的,可是这个盒子又不能连wifi。简而言之就是只能插网线,这下完蛋了。这个方法不能用,该怎么办呢?看来只能另寻出路。有句老话说,有事请Google。这里也不说废话了直接上代码。

Process ppyx = null;
        try {
            ppyx = Runtime.getRuntime().exec("cat /sys/class/net/eth0/address ");
        } catch (IOException e) {
            e.printStackTrace();
        }
        InputStreamReader ir = new InputStreamReader(ppyx.getInputStream());
        LineNumberReader input = new LineNumberReader(ir);

        for (; null != str;) {
            try {
                str = input.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (str != null) {
                mac = str.trim();// 去空格
                break;
            }
        }

通过上面的方法就可以完美的解决我的问题了。这个方法是获取系统的文件下面有个文件里的保存的mac地址,其中的/sys/class/net/eth0/address是默认路径(不同的机器可能会不同,可以从目前的情况来看,并没有什么不同)。很简单的几句话,也没什么好解释的。(还有此方法获取的mac和wifi获取的mac是不一样的,因为这是两个mac,希望大家不要纠结为什么这两个mac不一样)

总结

再简单的东西,也不能轻视。最后坑的只能是自己……

猜你喜欢

转载自blog.csdn.net/w_devilmaycry/article/details/79701226