Как найти MAC-адрес устройства Android программно

Как получить программный код Mac Id устройства Android. Я сделал с кодом IMIE, и я знаю, как проверять MAC-идентификатор на устройстве вручную, но не знаю, как узнать программно.

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

Кроме того, добавьте ниже разрешение в файл манифеста

  

См. Изменения 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.

См. Этот пост, где я представил пример Utils.java для реализации реализаций pure-java и работает без WifiManager. Некоторые устройства Android могут не иметь доступ к Wi-Fi или использовать проводку Ethernet.

 Utils.getMACAddress("wlan0"); Utils.getMACAddress("eth0"); Utils.getIPAddress(true); // IPv4 Utils.getIPAddress(false); // IPv6 

С помощью этого кода вы также сможете получить MacAddress в Android 6.0

 public static String getMacAddr() { try { List  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) + ":"); 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"; } 

EDIT 1. Этот ответ получил ошибку, когда байт, который в шестнадцатеричной форме получил одну цифру, не появится с «0» перед ним. Приложение res1 было изменено, чтобы позаботиться об этом.

Работает

  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 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) + ":"); res1.append(String.format("%02X:",b)); } if (res1.length() > 0) { res1.deleteCharAt(res1.length() - 1); } return res1.toString(); } } catch (Exception ex) { //handle exception } return ""; } } 

ОБНОВЛЕНИЕ 1

Этот ответ получил ошибку, когда байт, который в шестнадцатеричной форме получил одну цифру, не появится с «0» перед ним. Приложение res1 было изменено, чтобы позаботиться об этом.

  StringBuilder res1 = new StringBuilder(); for (byte b : macBytes) { // res1.append(Integer.toHexString(b & 0xFF) + ":"); res1.append(String.format("%02X:",b)); } 
  • Удалите все неиспользуемые ресурсы из проекта Android
  • Значение тега ориентации EXIF ​​всегда 0 для изображения, сделанного с помощью приложения для портретов с вертикальной камерой
  • Является ли это правильным способом очистки стопы fragmentа при выходе из глубоко вложенного стека?
  • findViewById vs Просмотр шаблона владельца в адаптере ListView
  • TextView Marquee не работает
  • Android Thread для таймера
  • Ресурсы $ NotFoundException: ресурс не является Drawable (цвет или путь)?
  • ListView с интерактивным / редактируемым виджетами
  • Отключить сенсорные события для всех видов
  • Ссылка WebView нажмите открыть браузер по умолчанию
  • Пример предварительного просмотра камеры с использованием SurfaceTexture в Android
  • Давайте будем гением компьютера.