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

У меня есть приложение, для которого требуется адрес устройства. Я получаю адрес mac в Marshmallow и ниже легко, но проблема с nougat android and O. Итак, как найти mac.

Ответ 1

Изменено с версии 6.0 и более поздней версии: https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id

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

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

Изменения поведения в 7.0:

Владельцы устройств могут получить доступ к идентификаторам устройств. Владелец устройства может получить доступ MAC-адрес Wi-Fi устройства, используя DevicePolicyManagewr.getWifiMacAddress(). Если Wi-Fi никогда не был на этом устройстве, этот метод возвращает значение null.

Ответ 2

Через час я просто решил проблему.....

DeviceAdminReceiver admin = new DeviceAdminReceiver();
DevicePolicyManager devicepolicymanager = admin.getManager(getApplicationContext());
ComponentName name1 = admin.getWho(getApplicationContext());
if (devicepolicymanager.isAdminActive(name1)){
            String mac_address = devicepolicymanager.getWifiMacAddress(name1);
            Log.e("macAddress",""+mac_address);
}

Ссылки:

1) Android for Work: https://developer.android.com/about/versions/nougat/android-7.0-changes.html

2) DevicePolicyManger: https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#getWifiMacAddress(android.content.ComponentName)

3) DeviceAdminReceiver: https://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html#getWho(android.content.Context)

Счастливое кодирование....