web-gelistirme-sc.com

Programlı bir Android cihazın MAC'unu alma

Java kullanarak Android cihazımın MAC adresini almam gerekiyor. Çevrimiçi olarak arama yaptım, ancak yararlı bir şey bulamadım.

70
TSW1985

Yorumda belirtildiği gibi, MAC adresi WifiManager ile alınabilir.

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

Ayrıca AndroidManifest.xml içine uygun izinleri eklemeyi de unutmayın

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

Lütfen Android 6.0 Değişiklikleri bölümüne bakın. 

Kullanıcılara daha fazla veri koruması sağlamak için bu sürümden itibaren Android, Wi-Fi ve Bluetooth API'lerini kullanan uygulamalar için cihazın yerel donanım tanımlayıcısına programlı erişimi kaldırır. WifiInfo.getMacAddress () ve BluetoothAdapter.getAddress () yöntemleri artık sabit bir 02: 00: 00: 00: 00: 00 değerini döndürüyor.

Yakındaki harici cihazların donanım tanımlayıcılarına Bluetooth ve Wi-Fi taramaları yoluyla erişmek için, uygulamanızın şimdi ACCESS_FINE_LOCATION veya ACCESS_COARSE_LOCATION izinlerine sahip olması gerekir.

100
Konrad Reiche

MAC adresini WifiInfo.getMacAddress() ile almak Marshmallow ve üzeri sürümlerde çalışmaz, devre dışı bırakılır ve 02:00:00:00:00:00 öğesinin sabit değerini döndürür.

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

başkalarının yolu var here

10
ademar111190

Bu çözümü http://robinhenniges.com/en/Android6-get-mac-address-programmatically 'dan oluşturdum ve bu benim için çalışıyor! Umut yardımcı olur! 

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

Bu kodu kendim test ettim ve size ne olursa olsun WiFi ya da Ethernet mac adresi verecektir.

 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

Hatmi ile Çalışması

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

Mac adresini alabilirsiniz:

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

Manifest.xml'de İzni Ayarla

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

Artık bir Android cihazının donanım MAC adresini elde edemezsiniz. WifiInfo.getMacAddress () ve BluetoothAdapter.getAddress () yöntemleri 02: 00: 00: 00: 00: 00 döndürür. Bu kısıtlama Android 6.0'da tanıtıldı.

Ancak Rob Anderson <Marshmallow: https://stackoverflow.com/a/35830358 için çalışan bir çözüm buldu.

3
Luvnish Monga

Android kaynaklarından alınmış burada . Bu, MAC ADRESİNİ sistemin ayarlar uygulamasında gösteren asıl koddur.

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

MAC adreslerini LOCATION izni olmadan okumak için bir yol bulduğumu düşünüyorum: ip addr dosyasını çalıştırın ve çıktısını ayrıştırın. (muhtemelen bu ikili kodun kaynak koduna bakarak benzerini yapabilirsiniz)

0
Mygod

Bu basit yöntemi kullanmak

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