109 votes

Obtenir de façon programmée le MAC d'un appareil Android

Je dois obtenir l'adresse MAC de mon appareil Android en utilisant Java. J'ai fait des recherches en ligne, mais je n'ai rien trouvé d'utile.

125voto

platzhirsch Points 10662

Comme cela a déjà été souligné dans le commentaire, l'adresse MAC peut être reçue par le biais de la WifiManager .

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

N'oubliez pas non plus d'ajouter les permissions appropriées dans votre fichier AndroidManifest.xml

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

Veuillez vous référer à Changements dans Android 6.0 .

Pour offrir aux utilisateurs une meilleure protection des données, Android supprime, à partir de cette version, l'accès programmatique à l'identifiant matériel local de l'appareil pour les applications utilisant les API Wi-Fi et Bluetooth. Les méthodes WifiInfo.getMacAddress() et BluetoothAdapter.getAddress() renvoient désormais une valeur constante de 02:00:00:00:00:00.

Pour accéder aux identifiants matériels des appareils externes situés à proximité via les balayages Bluetooth et Wi-Fi, votre application doit désormais disposer des autorisations ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION.

45voto

minipif Points 1125

Obtenir l'adresse MAC par [WifiInfo.getMacAddress()](https://developer.android.com/reference/android/net/wifi/WifiInfo.html#getMacAddress()) ne fonctionnera pas sur Marshmallow et les versions supérieures, il a été désactivé et reviendra la valeur constante de 02:00:00:00:00:00 .

30voto

pm dubey Points 487
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";
}

17voto

J'ai trouvé cette solution à partir de http://robinhenniges.com/en/android6-get-mac-address-programmatically et ça marche pour moi ! J'espère que cela vous aidera !

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) {
                String hex = Integer.toHexString(b & 0xFF);
                if (hex.length() == 1)
                    hex = "0".concat(hex);
                res1.append(hex.concat(":"));
            }

            if (res1.length() > 0) {
                res1.deleteCharAt(res1.length() - 1);
            }
            return res1.toString();
        }
    } catch (Exception ex) {
    }
    return "";
}

11voto

ademar111190 Points 2855
<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;
}

avoir d'autres moyens aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X