关于获取安卓设备的mac地址

原文地址:https://www.cnblogs.com/hankzhouAndroid/p/6554131.html


今日发现一个问题,系统要求从设备上获取一个唯一码作为当前登录用户的唯一标识;

之前尝试过很多方法,最后决定采用mac地址。

官方获取mac地址的方法是:

1
2
3
4
5
6
7
public  static  String getWifiMac(Context ctx) {
         WifiManager wifi = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
         WifiInfo info = wifi.getConnectionInfo();
         String str = info.getMacAddress();
         if  (str ==  null ) str =  "" ;
         return  str;
     }

但是最后发现,某些设备上(比如乐视2手机,谷歌的Nexus9 pad),用这种方式获取的mac地址都是02:00:00:00:00:00 .

并不能起到唯一标识的作用。

后来发现,Android的内核是linux,那么应该可以通过shell命令的方式来获取。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
      * 这是使用adb shell命令来获取mac地址的方式
      * @return
      */
     public  static  String getMac() {
         String macSerial =  null ;
         String str =  "" ;
 
         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  (IOException ex) {
             // 赋予默认值
             ex.printStackTrace();
         }
         return  macSerial;
     }

  解决上述两种设备上mac地址获取错误的问题。

     可见,就算是谷歌官方给出的解决方案也未必可靠,要根据实际情况酌情考虑使用。

  另外,尝试了一下在4G网络下获取mac地址,结果是null。说明 4G网络下不会有mac地址这一说,因为根本获取不到。3G网也应该类似(没做试验)。

  但是有些设备,运行shell命令会报错:权限被拒绝。(Nexus 9 pad亲测,这个方法不灵);这就很尴尬了。。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值