Ich muss die MAC-Adresse meines Android-Geräts mit Java ermitteln. Ich habe online gesucht, aber nichts Nützliches gefunden.
Ich muss die MAC-Adresse meines Android-Geräts mit Java ermitteln. Ich habe online gesucht, aber nichts Nützliches gefunden.
Antworten:
Wie bereits im Kommentar erwähnt, kann die MAC-Adresse über den WifiManager empfangen werden .
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
String address = info.getMacAddress();
Vergessen Sie auch nicht, die entsprechenden Berechtigungen zu Ihrem hinzuzufügen AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Weitere Informationen finden Sie unter Änderungen in Android 6.0 .
Um den Benutzern einen besseren Datenschutz zu bieten, entfernt Android ab dieser Version den programmgesteuerten Zugriff auf die lokale Hardware-ID 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 Wi-Fi-Scans auf die Hardware-IDs externer Geräte in der Nähe zugreifen zu können, muss Ihre App jetzt über die Berechtigungen ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION verfügen.
Erhalten der MAC-Adresse durch WifiInfo.getMacAddress()
funktioniert unter Marshmallow und höher nicht. Sie wurde deaktiviert und gibt den konstanten Wert von zurück02:00:00:00:00:00
.
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";
}
<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;
}
habe andere weg hier
macAddress
jemals sein null
?
Context context
? Wenn ja, sollte ein Kontext funktionieren. developer.android.com/reference/android/content/…
Ich habe diese Lösung von http://robinhenniges.com/de/android6-get-mac-address-programmatisch gegründet und sie funktioniert für mich! Hoffnung 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 "";
}
Es arbeitet 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 "";
}
}
Sie können Mac-Adresse erhalten:
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String mac = wInfo.getMacAddress();
Legen Sie die Berechtigung in Menifest.xml fest
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
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.
Rob Anderson hat jedoch eine Lösung gefunden, die für <Marshmallow: https://stackoverflow.com/a/35830358 funktioniert
Entnommen aus den Android-Quellen hier . Dies ist der tatsächliche Code, der Ihre MAC-ADRESSE in der App für die Systemeinstellungen anzeigt.
private void refreshWifiInfo() {
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS);
String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress
: getActivity().getString(R.string.status_unavailable));
Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS);
String ipAddress = Utils.getWifiIpAddresses(getActivity());
wifiIpAddressPref.setSummary(ipAddress == null ?
getActivity().getString(R.string.status_unavailable) : ipAddress);
}
WifiManager
(dh WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
) zu erhalten.
02:00:00:00:00:00
Mac-Adresse, nicht die tatsächliche WLAN-Mac-ID
Mit dieser einfachen Methode
WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String WLANMAC = wm.getConnectionInfo().getMacAddress();
Dieser ip link | grep -A1 wlan0
Befehl funktioniert unter Android 9 unter So ermitteln Sie die WLAN-Hardwareadresse in Termux