獲取Android手機MAC的一種實現方案,僅供參考,哈哈哈!是否還有其他更優的解決方法呢?
請注意,高版本在WiFi關閉時,獲取不到MAC
`
/**
* 獲取手機MAC;
* @param context
* @return
*/
public static String getWlanMac(Context context){
String mac = getWlanMacWifiManager(context);
if(mac == null){
//從本地文件獲取
mac = getWlanMacLocalAddress();
if(mac == null){
//從java網絡接口獲取
mac = getWlanMacInterface();
if(mac == null){
//最後從緩存裏讀取
mac = Pref.getString("wlan_mac_cached", context);
}
}
}
if(mac != null){
//緩存mac值,防止後續獲取失敗;一般MAC不會改變
Pref.saveString("wlan_mac_cached", mac, context);
}
return mac;
/**
* 從WifiManager接口獲取手機MAC;
* @param context
* @return
*/
public static String getWlanMacWifiManager(Context context){
Log.i("DeviceUtil","get mac by WifiManager...");
String mac = null;
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
boolean isWifiEnabled = wifiManager.isWifiEnabled();
if(!isWifiEnabled){
//6.0以上版本獲取需要等待授權,所以下面的讀取語句會執行失敗
wifiManager.setWifiEnabled(true);
}
if (isWifiEnabled) {
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
mac = wifiInfo.getMacAddress();
if(CheckUtils.isMacRight(mac)){
Log.i("DeviceUtil","mac = " + mac);
return mac;
}else{
mac = null;
}
}
}
return mac;
}
/**
* 從本地文件獲取手機MAC;
* @param context
* @return
*/
public static String getWlanMacLocalAddress(){
Log.i("DeviceUtil","get mac by local address...");
String mac = null;
String path = "/sys/class/net/wlan0/address";
File wlan0 = new File(path);
if(wlan0.exists() && wlan0.isFile()){
mac = execCmd("cat " + path);
if (CheckUtils.isMacRight(mac)) {
return mac;
}else{
mac = null;
}
}
return mac;
}
private static String getWlanMacInterface() {
Log.i("DeviceUtil","get mac by new interface..." );
String mac = null;
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 mac;
}
StringBuilder builder = new StringBuilder();
for (byte b : macBytes) {
builder.append(String.format("%02X:",b));
}
if (builder.length() > 0) {
builder.deleteCharAt(builder.length() - 1);
}
mac = builder.toString();
Log.i("DeviceUtil","mac = " + mac);
}
} catch (Exception e) {
e.printStackTrace();
}
return mac;
}
`