Как получить MAC-адрес с устройства Android с OS 11?

мы используем

NetworkInterface.getHardwareAddress() чтобы получить MAC-адрес,

но, как видно из https://developer.android.com/training/articles/user-data-ids#mac-11-plus

теперь он не будет использоваться для Android OS 11

так что кто-нибудь знает решения этого или любого руководства будет большим подспорьем?


person Amit Vaghela    schedule 18.02.2021    source источник
comment
Вы не можете получить mac-адрес устройства на Android 11, обходным путем является установка уровня targetSdk на 29.   -  person Rohit    schedule 02.06.2021


Ответы (3)


код @hafiza просто работает для Android 6 -> Android 9, для Android 10, 11, 12, потому что по умолчанию используется случайный MAC-адрес => вы должны установить Mac устройства на Wi-Fi, который вы подключаете => или вы можете использовать функцию владельца устройства для получить Mac (но сейчас это невозможно)

person tony teo    schedule 24.02.2021
comment
пожалуйста, продемонстрируйте код, если у вас есть, это поможет здесь - person Amit Vaghela; 01.03.2021

Руководящие принципы Android предписывают прекратить использование MAC-адресов в качестве идентификаторов, поскольку ссылка, которую вы разместили, есть и другие альтернативы, если вы хотите использовать Mac в Android 11, почти невозможно получить тот же Mac, даже с кодом @hafiza (вы забыли сказать, что есть некоторые дополнительные разрешения манифеста) В моем приложении я использовал проверку Mac до Android 9, теперь я использую эту библиотеку https://github.com/fingerprintjs/fingerprint-android, что является действительно полезным решением для получения идентификатора. Я тестировал на Android 9, 10 и 11 без каких-либо реальных проблем или случайных значений.

person javdromero    schedule 28.02.2021
comment
предоставляет ли это MAC-адрес для OS 11? - person Amit Vaghela; 01.03.2021

В моем проекте Android я использую следующий код, чтобы заставить Mac Address работать на всех ОС Android, надеюсь, это поможет

public static String getMacAddress() {
    try {
        List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface networkInterface : all) {
            if (!networkInterface.getName().equalsIgnoreCase("wlan0")) continue;

            byte[] macBytes = networkInterface.getHardwareAddress();
            if (macBytes == null) {
                return "";
            }

            StringBuilder res1 = new StringBuilder();
            Log.e("get mac", "getMacAddr: "+res1.toString() );
            for (byte b : macBytes) {
                // res1.append(Integer.toHexString(b & 0xFF) + ":");
                res1.append(String.format("%02X:",b));
            }

            if (res1.length() > 0) {
                res1.deleteCharAt(res1.length() - 1);
            }
            return res1.toString().replace(":","-");
        }
    } catch (Exception ex) {
        Log.e("TAG", "getMacAddr: ", ex);
    }
    return "";
}
person hafiza    schedule 22.02.2021
comment
Вы пробовали этот код с Android 11? это дает значения? - person Amit Vaghela; 22.02.2021
comment
ДА... у вас не работает? - person hafiza; 22.02.2021
comment
НЕТ, я только что взял ваш код и протестировал его на устройстве, но он не работает - person Amit Vaghela; 22.02.2021
comment
@hafiza, если вы установите для targetSdk значение 30, ваш код не будет работать. - person Rohit; 02.06.2021