Программно получать MAC-адрес устройства Android

Мне нужно получить MAC-адрес моего устройства Android с использованием Java. Я искал в Интернете, но я не нашел ничего полезного.

Solutions Collecting From Web of "Программно получать MAC-адрес устройства Android"

Как уже указывалось в комментарии, MAC-адрес может быть получен через WifiManager .

WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = manager.getConnectionInfo(); String address = info.getMacAddress(); 

Также не забудьте добавить соответствующие разрешения в свой AndroidManifest.xml

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

Обратитесь к изменениям Android 6.0 .

Чтобы предоставить пользователям более полную защиту данных, начиная с этой версии, Android удаляет программный доступ к локальному идентификатору оборудования для приложений с использованием API Wi-Fi и Bluetooth. Теперь методы WifiInfo.getMacAddress () и BluetoothAdapter.getAddress () возвращают постоянное значение 02: 00: 00: 00: 00: 00.

Чтобы получить доступ к идентификаторам оборудования соседних внешних устройств через Bluetooth и сканирование Wi-Fi, ваше приложение должно теперь иметь разрешения ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION.

Получение MAC-адреса через WifiInfo.getMacAddress() не будет работать на Marshmallow и выше, он был отключен и вернет постоянное значение 02:00:00:00:00:00 .

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> public String getMacAddress(Context context) { WifiManager wimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); String macAddress = wimanager.getConnectionInfo().getMacAddress(); if (macAddress == null) { macAddress = "Device don't have mac address or wi-fi is disabled"; } return macAddress; } 

Есть другие способы здесь

 public static 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 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) { } return "02:00:00:00:00:00"; } 

Вы можете получить адрес mac:

 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wInfo = wifiManager.getConnectionInfo(); String mac = wInfo.getMacAddress(); 

Установить разрешение в Menifest.xml

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 

Я основал это решение из http://robinhenniges.com/en/android6-get-mac-address-programmatically, и он работает для меня! Надежда помогает!

 public static 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 res1 = new StringBuilder(); for (byte b : macBytes) { res1.append(Integer.toHexString(b & 0xFF) + ":"); } if (res1.length() > 0) { res1.deleteCharAt(res1.length() - 1); } return res1.toString(); } } catch (Exception ex) { } return "02:00:00:00:00:00"; } 

Взято из источников Android здесь . Это фактический код, который показывает ваш MAC ADDRESS в приложении настроек системы.

 private void refreshWifiInfo() { WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS); String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : getActivity().getString(R.string.status_unavailable)); Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS); String ipAddress = Utils.getWifiIpAddresses(getActivity()); wifiIpAddressPref.setSummary(ipAddress == null ? getActivity().getString(R.string.status_unavailable) : ipAddress); } 

Вы больше не можете получить MAC-адрес устройства устройства Android. WifiInfo.getMacAddress () и BluetoothAdapter.getAddress () вернутся 02: 00: 00: 00: 00: 00. Это ограничение было введено в Android 6.0.

Но Роб Андерсон нашел решение, которое работает для <Marshmallow: https://stackoverflow.com/a/35830358

Его работа с зефиром

 package com.keshav.fetchmacaddress; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Collections; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("keshav","getMacAddr -> " +getMacAddr()); } public static 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 res1 = new StringBuilder(); for (byte b : macBytes) { res1.append(Integer.toHexString(b & 0xFF) + ":"); } if (res1.length() > 0) { res1.deleteCharAt(res1.length() - 1); } return res1.toString(); } } catch (Exception ex) { //handle exception } return ""; } }