package com.example.mytest;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import androidx.annotation.NonNull;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.NetworkInterface;
import java.util.Collections;
import java.util.List;
public class MacUtils {
/**
* 获取MAC地址
* 适配各个版本Android系统 <6.0===》getWifiMac 6.0-7.0===》getMacAddressFromFile >=7.0=====》
* param context
* return
*/
public static String getMacAddress(@NonNull Context context) {
String mac = "02:00:00:00:00:00";
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
mac = getWifiMac(context);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
mac = getMacAddressFromFile();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mac = getMacFromHardware();
}
return mac;
}
/**
* Android 6.0以下
* 基础Mac获取方法
*
* @return
*/
private static String getWifiMac(@NonNull Context context) {
////LogUtils.logD(TAG, "获取WifiMac地址===》getWifiMac方法 当前系统版本==》" + Build.VERSION.SDK_INT);
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
return wifiInfo.getMacAddress();
}
/**
* Android 6.0(包括) - Android 7.0(不包括)
* 通过读取系统文件获取Mac
*
* @return
*/
private static String getMacAddressFromFile() {
//LogUtils.logD(TAG, "获取WifiMac地址===》getMacAddressFromFile方法 当前系统版本==》" + Build.VERSION.SDK_INT);
String WifiAddress = "02:00:00:00:00:00";
try {
WifiAddress = new BufferedReader(new FileReader(new File("/sys/class/net/wlan0/address"))).readLine();
} catch (IOException e) {
e.printStackTrace();
}
return WifiAddress;
}
/**
* Android 7.0之后获取Mac地址 需要通过遍历网络接口获取Ip 否则将永远返回02:00:00:00:00
* 遍历循环所有的网络接口,找到接口是 wlan0
* 必须的权限 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
*
* @return
*/
private static String getMacFromHardware() {
//LogUtils.logD(TAG, "获取WifiMac地址===》getMacFromHardware方法 当前系统版本==》" + Build.VERSION.SDK_INT);
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 null;
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:", b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
android 获取wifi的mac地址
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 今天在撸代码时发现,之前能获取mac地址的方法在nexus 6上返回了“02:00:00:00:00:00”,进入...
- 记录一下,直接调用系统的方法,实际测试可以获取,注意:需要申请wifi相关权限,同时还有定位权限,Android ...
- 最近公司项目增加了一个需求,就是做一个类似于钉钉的打卡功能,通过判断员工手机所连接的wifi是不是公司内网从而判断...
- 'CNCopySupportedInterfaces()' was deprecated in iOS 9.0:F...
- 苹果提供了NetworkExtension框架让开发者实现VPN以及WiFi热点相应的功能,虽然iOS9系统出来之...