`
xuanzhui
  • 浏览: 201468 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Android6及以上版本获取MAC地址

阅读更多

为给用户提供更严格的数据保护,从 Android 6.0 (Marshmallow) 版本开始,对于使用 WLAN API 和 Bluetooth API 的应用,Android 移除了对设备本地硬件标识符的编程访问权。WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getAddress() 方法现在会返回常量值 02:00:00:00:00:00。

 

现在,要通过蓝牙和 WLAN 扫描访问附近外部设备的硬件标识符,您的应用必须拥有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限。

 

refer Android 6.0 变更

 

注意:不要傻傻的以为添加了 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限就能访问自己应用所在手机的MAC地址了,上面说的是扫描附近别的设备的硬件标识符。

 

目前的可替代方案

public String getMacAddr() {
    try {
        List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface nif : all) {
            if (!nif.getName().equalsIgnoreCase("wlan0")) continue;

            byte[] macBytes = nif.getHardwareAddress();
            if (macBytes == null) {
                return "";
            }

            StringBuilder res = new StringBuilder();
            for (byte b : macBytes) {
                res.append(String.format("%02X:",b));
            }

            if (res.length() > 0) {
                res.deleteCharAt(res.length() - 1);
            }

            return res.toString();
        }
    } catch (Exception ex) {
        Log.w("MacAddr", "exception during retrieving MAC address: " + ex.getMessage());
    }

    return "02:00:00:00:00:00";
}

 

该方案可行的条件是保证WLAN(WiFi)处于开启状态,能不能访问网络不是必要条件。

 

refer Android 6.0 - You CAN NO longer access the Mac-Address? You can !

 

 

 

 

分享到:
评论

相关推荐

    android jni获取 Mac地址

    在Android系统中,由于安全和隐私考虑,直接通过Java API获取MAC地址的权限受到了限制。因此,开发者有时需要通过JNI来绕过这些限制,直接访问底层系统接口。 首先,我们需要创建一个JNI函数,这个函数将在C/C++...

    Android获取Mac地址

    在Android 8.0(API级别26)及以上版本,Google引入了随机化Mac地址的功能,即使在开启Wi-Fi的情况下,设备也会在每次连接时生成一个临时的Mac地址。这种情况下,即使通过蓝牙获取的Mac地址也不再可靠。为了获取设备...

    android6.0及以上获取wifi MAC地址

    Android 6.0的手机无法通过低版本的Mac地址获取方式获取Mac地址,可以通过读取节点进行获取"/sys/class/net/wlan0/address",具体参考http://blog.csdn.net/zhangvalue/article/details/78220825,亲测通过

    Android获得设备状态信息、Mac地址、IP地址的方法

    有些软件还要根据Mac地址来判定当前用户以前是否登录过。下面将一一介绍获取这些手机状态信息的方法。 1 通过build获取手机硬件信息 运用反射获取Build信息,然后从build中得到对应字段的值。这种情况适用于获取...

    解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题

    Android 6.0 获取 Wi-Fi Mac 地址为 02:00:00:00:00:00 问题解决方法 ...使用该方法可以解决 Android 6.0 获取 Wi-Fi Mac 地址为 02:00:00:00:00:00 问题,实现在 Android 6.0 及以上版本中获取 Wi-Fi Mac 地址。

    Android_获取手机IP和MAC地址

    获取MAC地址则相对复杂一些,因为Android在6.0及以上版本对MAC地址进行了隐私保护,不再允许直接获取。但在较低版本中,你可以通过以下方式获取: ```java public String getMacAddress() { try { List...

    jni获取Android设备MAC Address最完美解决方案

    本解决方案主要针对如何通过JNI在Android设备上获取MAC地址。 MAC地址(Media Access Control Address)是网络设备的物理地址,每个网络接口控制器都有一个唯一的MAC地址,用于标识网络上的设备。在Android系统中,...

    android 获取mac地址源码

    以下是对Android获取MAC地址源码的详细解析。 首先,我们需要了解在不同Android版本下的获取方法: 1. **Android 5.1 (API级别22)及更低版本**: 在这些早期版本中,可以通过`WifiManager`的`getMacAddress()`方法...

    Android获取本地Wifi的Mac地址[实测MIUI Android8.1]

    在Android 6.0及以上版本,可以请求`ACCESS_FINE_LOCATION`或`ACCESS_COARSE_LOCATION`权限,因为这两个权限间接允许访问Wi-Fi信息。然后通过以下步骤获取Mac地址: 1. 首先,需要导入相关库: ```java import java...

    Android获取手机ip地址及mac地址

    1. **权限**:获取MAC地址需要在AndroidManifest.xml中添加`ACCESS_WIFI_STATE`和`ACCESS_COARSE_LOCATION`权限,而从API 23(Android 6.0)开始,动态请求`ACCESS_FINE_LOCATION`权限才能获取MAC地址。 2. **API...

    如何使用Java代码获取Android移动终端Mac地址.zip

    由于隐私和安全原因,从Android 6.0(API级别23)开始,系统对此进行了限制,不再允许应用直接获取Mac地址。不过,仍有一些方法可以尝试获取Mac地址,尤其是在系统层面或具有特定权限的应用中。以下将详细介绍如何...

    Android开发获取手机Mac地址适配所有Android版本

    对于Android 6.0以下的版本(API级别22及更低),我们可以直接使用Google提供的公共方法来获取Mac地址,即通过`WifiManager`的`getConnectionInfo()`方法获取`WifiInfo`对象,然后调用`getMacAddress()`获取Mac地址...

    适配android11及以上版本的 ijkplayer播放器so包

    在Android 11及以上版本中,由于系统权限和安全策略的变化,适配ijkplayer的so库成为开发者面临的重要任务。本知识点将详细介绍如何解决在Android 11上因ijkplayer播放器so包导致的视频播放问题。 一、Android 11的...

    Android 移动端获取设备MAC Demo

    1. **Android权限**:在Android 6.0(API级别23)及以上版本,获取MAC地址需要申请`ACCESS_WIFI_STATE`权限。在AndroidManifest.xml文件中添加如下代码: ```xml &lt;uses-permission android:name="android....

    获取Android设备ID和Mac地址的apk

    Android设备安装此apk之后,运行就可以看到设备的ID和Mac地址。

    Android 获取蓝牙Mac地址的正确方法

    接下来,我们探讨如何在Android 6.0及以上版本中正确获取蓝牙设备的Mac地址: 1. **使用反射机制:** 由于系统对蓝牙Mac地址的隐藏,开发者可以尝试使用反射来访问隐藏的API。这需要导入`java.lang.reflect.Method...

    安卓获取手机系统内核wifi的mac地址等信息

    在安卓系统中,获取手机的各种信息是开发过程中常见的需求,特别是对于系统信息的获取,例如系统版本号、内核版本号、设备型号以及无线网络接口(如Wi-Fi和蓝牙)的MAC地址。以下是对这些知识点的详细解释: 1. **...

    Android手机获取Mac地址的几种方法

    Android 手机获取 Mac 地址是 Android 开发中非常重要的一个话题,Mac 地址是每个网络设备唯一的标识符,获取 Mac 地址可以用于设备识别、网络管理等方面。本文将为大家介绍 Android 手机获取 Mac 地址的几种方法。 ...

    Android 判断网络是否可用 & 获取IP地址 & 获取以太网口MAC地址

    判断网络是否可用: 注意!是判断网络是否可用,但网络可用不代表一定能上外网的! public static boolean isNetworkAvailable(Context context) { ConnectivityManager manager = (ConnectivityManager) context...

Global site tag (gtag.js) - Google Analytics