-2

我正在使用此代码获取 MAC 地址并将其显示在我的应用程序中。该代码适用于除最新设备和 ANDROID BOX 之外的所有设备。

ANDROID BOX 和其他最新设备显示为空。

这是代码:

   public static String getWifiMacAddress() {
    try {
        String interfaceName = "wlan0";
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            if (!intf.getName().equalsIgnoreCase(interfaceName)){
                continue;
            }

            byte[] mac = intf.getHardwareAddress();
            if (mac==null){
                return "";
            }

            StringBuilder buf = new StringBuilder();
            for (byte aMac : mac) {
                buf.append(String.format("%02X:", aMac));
            }
            if (buf.length()>0) {
                buf.deleteCharAt(buf.length() - 1);
            }
            return buf.toString();
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}

我已经在清单文件中写了这些权限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
4

3 回答 3

0

首先,您需要在 AndroidManifest.xml 中添加 Internet 用户权限。

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

然后参考这个来获取mac地址http ://robinhenniges.com/en/android6-get-mac-address-programmatically

如果它不起作用,那么请参考这个 Android 6.0 的变化 ,我得出的结论是,

为了给用户提供更好的数据保护,从这个版本开始,Android 移除了对使用 Wi-Fi 和蓝牙 API 的应用程序的设备本地硬件标识符的编程访问。WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法现在返回 02:00:00:00:00:00 的常量值。

要通过蓝牙和 Wi-Fi 扫描访问附近外部设备的硬件标识符,您的应用现在必须具有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限。 请注意 :即使拥有这些权限您也无法获得自己的 MAC。仔细阅读,据说您可以获得具有这些权限的其他设备 MAC,但不能获得您自己的 MAC

于 2017-01-27T12:48:54.137 回答
0

首先你会检查权限是否被授予?

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

此外,在您的清单文件中添加以下权限

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

请参阅此链接以获取 6.0 棉花糖

于 2017-01-27T12:45:06.183 回答
-1

与 6.0 及更高版本一样,仅在 Manifest 中添加权限是行不通的。您应该具有运行时权限,如果未授予,则授予它。

检查此链接:

https://stackoverflow.com/a/30549756/3910281

于 2017-01-27T12:46:49.323 回答