Programmgesteuertes Abrufen des MAC eines Android-Geräts

Lesezeit: 5 Minuten

Programmgesteuertes Abrufen des MAC eines Android Gerats
TSW1985

Ich muss die MAC-Adresse meines Android-Geräts mit Java abrufen. Ich habe im Internet gesucht, aber nichts brauchbares gefunden.

  • Programmierunglinuxblog.blogspot.pt/2011/06/…

    – Ismael

    29. Juli 2012 um 1:30 Uhr

  • mögliches Duplikat von Wie erhalte ich die MAC-Adresse der WiFi-Netzwerkschnittstelle?

    – AH

    29. Juli 12 um 14:49 Uhr

  • mögliches Duplikat von So finden Sie die MAC-Adresse eines Android-Geräts programmgesteuert

    – Schmerz

    28. März 14 um 3:19 Uhr

  • Bitte überprüfen Sie diese Lösung, sie funktioniert bei mir stackoverflow.com/questions/31329733/…

    – Gorio

    28. Januar 16 um 12:03 Uhr

  • Von Android M ist diese API veraltet, verwenden Sie diese vorerst: stackoverflow.com/questions/31329733/…

    – Ehud

    14. Februar 16 um 17:16 Uhr

Programmgesteuertes Abrufen des MAC eines Android Gerats
Konrad Reiche

Wie bereits im Kommentar darauf hingewiesen wurde, kann die MAC-Adresse über die bezogen werden WifiManager.

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

Vergessen Sie auch nicht, die entsprechenden Berechtigungen in Ihrer hinzuzufügen AndroidManifest.xml

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

Bitte beziehen Sie sich auf Android 6.0-Änderungen.

Um Benutzern einen besseren Datenschutz zu bieten, entfernt Android ab dieser Version den programmgesteuerten Zugriff auf die lokale Hardwarekennung des Geräts für Apps, die die Wi-Fi- und Bluetooth-APIs verwenden. Die Methoden WifiInfo.getMacAddress() und BluetoothAdapter.getAddress() geben jetzt einen konstanten Wert von 02:00:00:00:00:00 zurück.

Um über Bluetooth- und WLAN-Scans auf die Hardwarekennungen von externen Geräten in der Nähe zugreifen zu können, muss Ihre App jetzt über die Berechtigungen ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION verfügen.

  • Auch nur eine Anmerkung, manchmal kann die Mac-Adresse nicht abgerufen werden, weil das WLAN auf dem Gerät ausgeschaltet ist

    – Sbrichards

    29. Juli 2012 um 1:37 Uhr

  • Der verlinkte Blog erklärt auch, wie man diese MAC-Adresse auf eine allgemeinere Weise findet, die nicht davon ausgeht, dass die Netzwerkschnittstelle eine WiFi-Verbindung verwendet.

    – Stefan C

    29. Juli 12 um 4:23 Uhr


  • Denken Sie daran, den Kontext zum Aufrufen von getSystemService zu verwenden.

    – Tito Leiva

    21. Januar 16 um 15:27 Uhr

  • Dies ist großartig für Android-Telefone und -Tablets, die WLAN verwenden, aber ich versuche, die Ethernet-MAC-Adresse auf einem alten Gingerbread-Android-Tablet abzurufen, das entweder WLAN oder Ethernet verwenden kann. Irgendwelche Gedanken darüber, wie man die Ethernet-MAC-Adresse überprüft? Danke.

    – Seth

    4. August 16 um 19:58 Uhr

  • @sbrichards was meinst du damit, dass WLAN ausgeschaltet ist?

    – Peter Chaula

    9. Oktober 16 um 9:18 Uhr

Die MAC-Adresse durchbekommen WifiInfo.getMacAddress() funktioniert nicht auf Marshmallow und höher, es wurde deaktiviert und kehrt zurück der konstante Wert von 02:00:00:00:00:00.

  • Was ist die Alternative?

    – Sam

    19. Juli 16 um 14:43 Uhr

  • @SameerThigale Hängt davon ab, was Sie erreichen möchten. Die Idee dahinter ist, dass Sie wahrscheinlich nicht versuchen sollten, die MAC-Adresse zu erhalten.

    – minipif

    19. Juli 16 um 20:38 Uhr

  • Ich bin mir nicht sicher, warum, aber ich kann im verknüpften API-Dokument keinen veralteten Hinweis finden. Vielleicht haben sie ihre Meinung diesbezüglich geändert?

    – DBX12

    19. September 16 um 8:45 Uhr

  • @DBX12 Die Methode selbst ist nicht als veraltet gekennzeichnet, obwohl sie nicht dokumentiert ist. Der zweite Link verweist auf eine offizielle Notiz darüber.

    – minipif

    20. September 16 um 3:02 Uhr

1643314027 845 Programmgesteuertes Abrufen des MAC eines Android Gerats
Uhr dubey

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

  • Unter Android 7.1 wird mir immer “02:00:00:00:00:00” angezeigt.

    – Android-Entwickler

    6. November 16 um 19:46 Uhr

  • Es muss auf einem physischen Gerät und nicht auf einem Emulator oder virtuellen Gerät getestet werden

    – pm dubey

    19. Dezember 16 um 15:36 Uhr

  • Es funktioniert immer noch. Vergessen Sie nicht, die Internetberechtigung in der Manifest-Datei zu erteilen.

    – pm dubey

    18. Juli 17 um 5:57 Uhr

  • Es funktioniert nicht mehr auf Android Marshmallow und höher, da es den Wert “02:00:00:00:00:00” zurückgibt.

    – Hiräths

    29. Juli 2020 um 2:49 Uhr

  • Es klappt. Ich benutze diesen Code schon sehr lange. Es funktioniert immer noch auf Android Q.

    – Rupam Das

    28. September 2020 um 5:36 Uhr

1643314027 533 Programmgesteuertes Abrufen des MAC eines Android Gerats
Tizian Bruschetta

Ich gründete diese Lösung aus http://robinhenniges.com/en/android6-get-mac-address-programmatically und es funktioniert bei mir! Hoffe hilft!

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

1643314028 892 Programmgesteuertes Abrufen des MAC eines Android Gerats
ademar111190

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

haben andere Weg hier

  • Wille macAddress jemals sein null?

    – Max Heiber

    10. August 16 um 14:26 Uhr

  • Welche Parameter müssen beim Funktionsaufruf als Kontext übergeben werden?

    – Donal

    12. April 18 um 3:10 Uhr

  • @Donal meinst du die Context context ? Wenn ja, sollte jeder Kontext funktionieren. developer.android.com/reference/android/content/…

    – ademar111190

    12. April 18 um 19:28 Uhr

Nachrustung 2 URL Abfrageparameter
Keshav Gera

Es funktioniert mit Marshmallow

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<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(Integer.toHexString(b & 0xFF) + ":");
                }

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

  • Wille macAddress jemals sein null?

    – Max Heiber

    10. August 16 um 14:26 Uhr

  • Welche Parameter müssen beim Funktionsaufruf als Kontext übergeben werden?

    – Donal

    12. April 18 um 3:10 Uhr

  • @Donal meinst du die Context context ? Wenn ja, sollte jeder Kontext funktionieren. developer.android.com/reference/android/content/…

    – ademar111190

    12. April 18 um 19:28 Uhr

1643314028 106 Programmgesteuertes Abrufen des MAC eines Android Gerats
Gemeinschaft

Sie können die Hardware-MAC-Adresse eines Android-Geräts nicht mehr abrufen. Die Methoden WifiInfo.getMacAddress() und BluetoothAdapter.getAddress() geben 02:00:00:00:00:00 zurück. Diese Einschränkung wurde in Android 6.0 eingeführt.

Aber Rob Anderson hat eine Lösung gefunden, die für < Marshmallow : https://stackoverflow.com/a/35830358 funktioniert

.

664800cookie-checkProgrammgesteuertes Abrufen des MAC eines Android-Geräts

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy