为给用户提供更严格的数据保护,从 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系统中,由于安全和隐私考虑,直接通过Java API获取MAC地址的权限受到了限制。因此,开发者有时需要通过JNI来绕过这些限制,直接访问底层系统接口。 首先,我们需要创建一个JNI函数,这个函数将在C/C++...
在Android 8.0(API级别26)及以上版本,Google引入了随机化Mac地址的功能,即使在开启Wi-Fi的情况下,设备也会在每次连接时生成一个临时的Mac地址。这种情况下,即使通过蓝牙获取的Mac地址也不再可靠。为了获取设备...
Android 6.0的手机无法通过低版本的Mac地址获取方式获取Mac地址,可以通过读取节点进行获取"/sys/class/net/wlan0/address",具体参考http://blog.csdn.net/zhangvalue/article/details/78220825,亲测通过
有些软件还要根据Mac地址来判定当前用户以前是否登录过。下面将一一介绍获取这些手机状态信息的方法。 1 通过build获取手机硬件信息 运用反射获取Build信息,然后从build中得到对应字段的值。这种情况适用于获取...
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 地址。
获取MAC地址则相对复杂一些,因为Android在6.0及以上版本对MAC地址进行了隐私保护,不再允许直接获取。但在较低版本中,你可以通过以下方式获取: ```java public String getMacAddress() { try { List...
以下是对Android获取MAC地址源码的详细解析。 首先,我们需要了解在不同Android版本下的获取方法: 1. **Android 5.1 (API级别22)及更低版本**: 在这些早期版本中,可以通过`WifiManager`的`getMacAddress()`方法...
在Android 6.0及以上版本,可以请求`ACCESS_FINE_LOCATION`或`ACCESS_COARSE_LOCATION`权限,因为这两个权限间接允许访问Wi-Fi信息。然后通过以下步骤获取Mac地址: 1. 首先,需要导入相关库: ```java import java...
1. **权限**:获取MAC地址需要在AndroidManifest.xml中添加`ACCESS_WIFI_STATE`和`ACCESS_COARSE_LOCATION`权限,而从API 23(Android 6.0)开始,动态请求`ACCESS_FINE_LOCATION`权限才能获取MAC地址。 2. **API...
由于隐私和安全原因,从Android 6.0(API级别23)开始,系统对此进行了限制,不再允许应用直接获取Mac地址。不过,仍有一些方法可以尝试获取Mac地址,尤其是在系统层面或具有特定权限的应用中。以下将详细介绍如何...
对于Android 6.0以下的版本(API级别22及更低),我们可以直接使用Google提供的公共方法来获取Mac地址,即通过`WifiManager`的`getConnectionInfo()`方法获取`WifiInfo`对象,然后调用`getMacAddress()`获取Mac地址...
在Android 11及以上版本中,由于系统权限和安全策略的变化,适配ijkplayer的so库成为开发者面临的重要任务。本知识点将详细介绍如何解决在Android 11上因ijkplayer播放器so包导致的视频播放问题。 一、Android 11的...
1. **Android权限**:在Android 6.0(API级别23)及以上版本,获取MAC地址需要申请`ACCESS_WIFI_STATE`权限。在AndroidManifest.xml文件中添加如下代码: ```xml <uses-permission android:name="android....
Android设备安装此apk之后,运行就可以看到设备的ID和Mac地址。
本解决方案主要针对如何通过JNI在Android设备上获取MAC地址。 MAC地址(Media Access Control Address)是网络设备的物理地址,每个网络接口控制器都有一个唯一的MAC地址,用于标识网络上的设备。在Android系统中,...
接下来,我们探讨如何在Android 6.0及以上版本中正确获取蓝牙设备的Mac地址: 1. **使用反射机制:** 由于系统对蓝牙Mac地址的隐藏,开发者可以尝试使用反射来访问隐藏的API。这需要导入`java.lang.reflect.Method...
在安卓系统中,获取手机的各种信息是开发过程中常见的需求,特别是对于系统信息的获取,例如系统版本号、内核版本号、设备型号以及无线网络接口(如Wi-Fi和蓝牙)的MAC地址。以下是对这些知识点的详细解释: 1. **...
Android 手机获取 Mac 地址是 Android 开发中非常重要的一个话题,Mac 地址是每个网络设备唯一的标识符,获取 Mac 地址可以用于设备识别、网络管理等方面。本文将为大家介绍 Android 手机获取 Mac 地址的几种方法。 ...
判断网络是否可用: 注意!是判断网络是否可用,但网络可用不代表一定能上外网的! public static boolean isNetworkAvailable(Context context) { ConnectivityManager manager = (ConnectivityManager) context...