【问题标题】:How to get mac Address from an Android Device?如何从 Android 设备获取 mac 地址?
【发布时间】:2019-12-17 11:36:26
【问题描述】:

我有一个可在一部手机上运行的 Android 应用程序。为了在单个设备上工作,我需要获取 MAC 地址或 Android ID。所以我决定获取 MAC 地址,因为应用程序需要连接到指定的 WiFi 网络。那么如何从 Android 设备获取 MAC 地址。

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

目前我正在使用它,但它不稳定,但是当应用重新启动时它会崩溃。

它返回 02:00:00:00:00:00. 并且应用程序崩溃

【问题讨论】:

  • 你在AndroidManifest.xml中使用<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  • 如上所述 here 在 Android 6.0(API 级别 23)和 Android 9(API 级别 28)之间,本地设备 MAC 地址(例如 Wi-Fi 和蓝牙)不可用通过第三方 API。 WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getDefaultAdapter().getAddress() 方法都返回 02:00:00:00:00:00。 这样您就可以获得需要许可的路由器的 MAC 地址如同一链接中所述。因此,这不会用于唯一识别设备的目的。您应该阅读链接中的整篇文章。
  • edit您的问题提供一个minimal reproducible example来演示该问题,以及完整的stack trace from the crash

标签: android mac-address


【解决方案1】:
  //getting mac address from mobile
private 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) + ":");
                res1.append(String.format("%02X:",b));
            }

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

在清单中使用这些权限

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

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

获取该方法的返回值到一个字符串变量并使用它。

String MAC = getMacAddr();

希望我能帮上忙

【讨论】:

    【解决方案2】:

    试试这个代码

    WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    WifiInfo wInfo = wifiManager.getConnectionInfo();
    String macAddress = wInfo.getMacAddress(); 
    Log.e(TAG,"MAC Address : " + macAddress);
    

    另外,在清单文件中添加以下权限

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

    输出是

    MAC 地址:84:11:9E:B7:1E:D0

    【讨论】:

      【解决方案3】:

      使用WifiManger,你会得到MAC地址

      WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
      WifiInfo wifiInfo = wifiManager.getConnectionInfo();
      String macAddress = wifiInfo.getMacAddress(); 
      

      别忘了添加wifi权限

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

      【讨论】:

        【解决方案4】:

        将此用于 Android ID

           private String deviceId() {
            return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-13
          • 1970-01-01
          • 1970-01-01
          • 2012-05-28
          • 2010-12-17
          • 1970-01-01
          • 2011-09-05
          • 1970-01-01
          相关资源
          最近更新 更多