Как получить адрес Wi-Fi Mac в Android Marshmallow

Я использую WiFi MAC-адрес как уникальный идентификатор, начиная с Marshmallow и возвращая поддельный MAC-адрес (по соображениям безопасности). С этим мое приложение Android ведет себя по-другому. Как получить фактический MAC-адрес устройства Android.

Я использую следующий фрагмент кода.

WifiManager wmgr = (WifiManager)getSystemService(Context.WIFI_SERVICE); String wifiId = wmgr.getConnectionInfo().getMacAddress(); 

Следующие разрешения добавляются в файл манифеста.

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

Solutions Collecting From Web of "Как получить адрес Wi-Fi Mac в Android Marshmallow"

Для получения адреса Mac в Android 6.0 есть работа.

Сначала вам нужно добавить разрешение на использование Интернета.

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

Затем вы можете найти mac по интерфейсу NetworkInterfaces.

 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"; } 

Источник: http://robinhenniges.com/ru/android6-get-mac-address-programmatically

FWIW решение, размещенное Робом Андерсоном, которое исходит от источника, который он привел, вернет MAC-адрес с шестнадцатеричными шестнадцатеричными символами в нижнем регистре и будет пропускать любые начальные нули (например, «12: 34: 56: 78: 90: 0A» станет «12 : 34: 56: 78: 90: a "), который, в зависимости от устройства, приведет к генерации недопустимых MAC-адресов.

Это поведение вызвано методом Integer.toHexString, который используется в образце, вызывающим скрытый метод AOSP java.lang.IntegralToString :: intToHexString (int i, bool uppercase, int minWidth) с ложным значением для верхнего регистра и 0 для Параметр minWidth.

Если вы хотите иметь верхний регистр и минимальную ширину 2, вы можете либо добавить метод IntegralToString :: intToHexString в свой проект, либо передать true / 2 для этих параметров, или просто можете использовать String.format («% 02X») вместо этого Выполните преобразование для вас с верхним регистром и шириной 2. Или еще более предпочтительным; Вы можете использовать String.format («% 02X:»), который затем сохранит ваш вызов добавления, чтобы добавить двоеточие после каждого байта.

Я пошел на мой маршрутизатор Netgear и посмотрел на вкладку, в которой перечислены подключенные устройства, которые красиво создали MAC ID.

Если есть сомнения, выключите устройство и просмотрите список, затем включите его и просмотрите снова. Новое объявление – ваш MAC ID. Измените список маршрутизаторов, чтобы показать это.

Более крупный взгляд, как они могли бы скрыть ваш MAC-идентификатор, поскольку он является одним из основных идентификаторов для всемирного состояния наблюдения?