it-swarm.com.de

Programmgesteuertes Abrufen der MAC eines Android-Geräts

Ich muss die MAC-Adresse meines Android-Geräts mithilfe von Java erhalten. Ich habe online gesucht, aber nichts Nützliches gefunden.

70
TSW1985

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 in Ihren AndroidManifest.xml einzufügen.

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

Bitte beziehen Sie sich auf Änderungen an Android 6.0

Um 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 WLAN- 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 auf die Hardware-IDs von externen Geräten in der Nähe über Bluetooth- und Wi-Fi-Scans zuzugreifen, muss Ihre App jetzt über die Berechtigungen ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION verfügen.

100
Konrad Reiche

Das Abrufen der MAC-Adresse durch WifiInfo.getMacAddress() funktioniert bei Marshmallow und darüber nicht. Es wurde deaktiviert und gibt den konstanten Wert von 02:00:00:00:00:00 zurück.

28
minipif
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";
}
12
pm dubey
<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 Wege hier

10
ademar111190

Ich habe diese Lösung von http://robinhenniges.com/de/Android6-get-mac-address-programmically gegründet und 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 "";
}
7

Ich habe diesen Code selbst getestet und gibt Ihnen die WLAN- oder Ethernet-MAC-Adresse, was immer verfügbar ist.

 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) + ":");
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < macBytes.length; i++) {
          sb.append(String.format("%02X%s", macBytes[i], (i < macBytes.length - 1) ? "-" : ""));
        }
        if (res1.length() > 0) {
          res1.deleteCharAt(res1.length() - 1);
        }
        return res1.toString();
      }
    } catch (Exception ex) {
      //handle exception
    }
    return getMacAddress();
  }

public static String loadFileAsString(String filePath) throws Java.io.IOException{
    StringBuffer data = new StringBuffer(1000);
    BufferedReader reader = new BufferedReader(new FileReader(filePath));
    char[] buf = new char[1024];
    int numRead=0;
    while((numRead=reader.read(buf)) != -1){
      String readData = String.valueOf(buf, 0, numRead);
      data.append(readData);
    }
    reader.close();
    return data.toString();
  }

  public static String getMacAddress(){
    try {
      return loadFileAsString("/sys/class/net/eth0/address")
              .toUpperCase().substring(0, 17);
    } catch (IOException e) {
      e.printStackTrace();
      return "02:00:00:00:00:00";
    }
  }
5

Seine Arbeit 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 "";
    }
}
5
Keshav Gera

Sie können eine MAC-Adresse erhalten:

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

Legen Sie die Berechtigung in Manifest.xml fest

<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE"></uses-permission>
4
user3270558

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.

3
Luvnish Monga

Genommen von den Android-Quellen hier . Dies ist der tatsächliche Code, der Ihre MAC-ADRESSE in der Einstellungs-App des Systems 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);
}
2
fernandohur

Ich glaube, ich habe gerade eine Möglichkeit gefunden, MAC-Adressen ohne LOCATION-Berechtigung zu lesen: Führen Sie ip addr aus und analysieren Sie die Ausgabe. (Sie könnten das wahrscheinlich auch tun, indem Sie sich den Quellcode dieser Binärdatei ansehen.)

0
Mygod

Mit dieser einfachen Methode

WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            String WLANMAC = wm.getConnectionInfo().getMacAddress();
0