Ich muss die MAC-Adresse meines Android-Geräts mit Java abrufen. Ich habe im Internet gesucht, aber nichts brauchbares gefunden.
Programmgesteuertes Abrufen des MAC eines Android-Geräts
TSW1985
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
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
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 "";
}
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 seinnull
?– 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
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 seinnull
?– 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
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
.
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