最近项目中遇到需要在C++层进行加密,然后编译成so。我们知道,MAC地址能够辨别设备的唯一性。所以有个需求就是需要在C++层获取MAC地址,这里我们就需要用到JNI编程了,话不多说,开始看看如何获取吧。
在这之前,不要忘记添加权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
首先,我们来看看java中是怎么获取的。Android6.0之前的方法在6.0之后已经无法获取成功。所以我们直接使用最新的获取方法。代码很简单,通过静态方法getByName获取NetworkInterface实例,然后通过getHardwareAddress()获取byte[]数组,注意这里获取到的是16进制的数组,需要转换。
/** * 获取设备MAC地址 * */ public static String getMacAddress() { /*获取mac地址有一点需要注意的就是android 6.0版本后,以下注释方法不再适用,不管任何手机都会返回"02:00:00:00:00:00"这个默认的mac地址,这是googel官方为了加强权限管理而禁用了getSYstemService(Context.WIFI_SERVICE)方法来获得mac地址。*/ // String macAddress= ""; // WifiManager wifiManager = (WifiManager) MyApp.getContext().getSystemService(Context.WIFI_SERVICE); // WifiInfo wifiInfo = wifiManager.getConnectionInfo(); // macAddress = wifiInfo.getMacAddress(); // return macAddress; String macAddress = null;