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

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

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

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命令的方式来获取。

代码如下:

/*** 这是使用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亲测,这个方法不灵);这就很尴尬了。。

转载于:https://www.cnblogs.com/hankzhouAndroid/p/6554131.html

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

  1. android 获取网卡mac_Java获取Linux安卓设备的mac地址方法

    Java如何获取Linux或安卓Android设备的mac地址呢?方法非常简单,只需要使用下方代码即可轻松通过java获取mac地址了,代码如下:public String getMacAddress ...

  2. uni-app 获取移动设备的MAC地址

    getMacAddress() { var macAddress = ''; if (plus.os.name == 'Android') {       console.log("plus ...

  3. android arp工具,GitHub - SummerSnow274/ARP_sed_rev: 在Android通过ARP询问实现获取同一网络所有设备的MAC地址,AP隔离的网络除外...

    ARP_sed_rev 在Android通过ARP询问实现获取同一网络所有设备的MAC地址,AP隔离的网络除外 arpsed.c 编译:gcc arpsed.c -o arpsed 运行:sudo . ...

  4. 利用ioctl获取本机指定设备的MAC地址

    // 利用ioctl获取本机指定设备的MAC地址 #include<stdio.h> #include<string.h> #include<stdlib.h> # ...

  5. android 获取设备的mac地址,Android编程获取设备MAC地址的实现方法

    本文实例讲述了Android编程获取设备MAC地址的实现方法.分享给大家供大家参考,具体如下: /** * 获取设备的mac地址 * * @param ac * @param callback * 成 ...

  6. android 获取mac c语言,获取设备的mac地址和IP地址(android6.0以上专用)

    /** * 获取设备HardwareAddress地址 * @return */ public static String getMachineHardwareAddress(){ Enumerati ...

  7. Android studio 获取设备的Mac地址,wifi和以太网均可使用

    /*** 获取设备的Mac地址* @return Mac地址*/public static String getLocalMacAddress() {String Mac=null;try{Strin ...

  8. android获取wifi mac地址吗,Android获取当前WiFi的MAC地址-适配所有版本

    ** Android获取当前WiFi的MAC地址 ** package com.dogness.platform.utils; import android.content.Context; impo ...

  9. linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法

    1.获取所有有(无)网卡型号 方法一.ifconfig 用法:ifconfig | grep | cut -d ':' -f 1 ubuntu root@ubuntu:~# ifconfig | gr ...

最新文章

  1. 【WinForm】“System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常
  2. iOS Category小举例
  3. 可以直接用的“ html转字符串string”方法
  4. 【生活】SSD 接口的分类
  5. 第十届蓝桥杯JavaB组总结
  6. Spring Boot——[java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration]解决方案
  7. B站up主用AI还原李焕英 动态影像
  8. python 中的eval与exec
  9. 串口操作之API篇 CreateFile
  10. 【OpenGL】顶点变换常用函数总结
  11. 演练 网站的导航栏 0920
  12. Ubuntu 15.04下安装Docker
  13. Python:学习笔记
  14. C++编译器的函数名修饰规则
  15. 统计学习之第二天(可汗学院公开课:统计学)
  16. Apache Log4j 远程代码注入漏洞
  17. python基础思维导图
  18. 遇到不同网段互相访问的一些问题的总结
  19. 小米笔记本用来开发java_小米笔记本 Pro用来编程怎么样?
  20. 线性代数(三十四) : 广义特征向量

热门文章

  1. 设计模式17_命令模式
  2. 下列有关计算机系统叙述正确,()下列有关计算机系统软件的叙述正确的是____
  3. 12505 java_Java jdbc Oracle error: ORA 12505
  4. 报表开发之自定义函数
  5. 深入浅出 数据库索引
  6. 医学专业考计算机三级,2020年9月中国医科大学计算机等级考试报名通知
  7. PyCharm汉化后无法打开Settings设置
  8. 二分搜索:lower_bound 与 upper_bound 函数
  9. pandas中DataFrame的学习笔记~
  10. 【抄】更改eclipse配置