Recuperar la dirección MAC de forma programática – Android

Hey chicos estoy teniendo un problema con la recuperación de la dirección MAC del dispositivo de forma programática, antes de que nadie menciona nada acerca de otros puestos que he leído ya como: Cómo encontrar la dirección MAC de un dispositivo Android de forma programática

sin embargo, he intentado usar el código con mi propia aplicación y lo probé con un sencillo log.d, sólo para encontrar que no está devolviendo nada. El mensaje de "ver si esto funciona muestra", pero nada más. Así que estoy suponiendo que la dirección MAC es nula.

Log.d("seeing if this works", macAddress2); 

El código de lo que he hecho se muestra aquí:

 //Set onclick listener for the Get Mac Address button getMac.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wInfo = wifiManager.getConnectionInfo(); String macAddress2 = wInfo.getMacAddress(); macAddress.setText(macAddress2); } }); 

¿En qué versión de Android pruebas? La última (10/2015) vista previa de Android M ha bloqueado la aplicación de obtener los identificadores de hardware para Wifi y Bluetooth.

Para ofrecer a los usuarios una mayor protección de datos, a partir de esta versión, Android elimina el acceso programático al identificador de hardware local del dispositivo para aplicaciones que utilizan las APIs Wi-Fi y Bluetooth. Los métodos WifiInfo.getMacAddress () y BluetoothAdapter.getAddress () ahora devuelven un valor constante de 02: 00: 00: 00: 00: 00.

Hay una solución al leer el Wifi MAC de /sys/class/net/wlan0/address , que sin embargo también será bloqueado en el Android N como lo afirma Google .

¿Tienes esto en el manifiesto?

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

Prueba esto:

 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) { } return "02:00:00:00:00:00"; } 

Desde aquí: http://robinhenniges.com/es/android6-get-mac-address-programmatically

Funciona para mi.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.