una tiene ser saber recuperar otro obtener moto mac disponible direccion como celular cambiar java android mac-address

java - ser - mi celular no tiene direccion mac



Programado obtener el MAC de un dispositivo Android (11)

Necesito obtener la dirección MAC de mi dispositivo Android usando Java. He buscado en línea, pero no he encontrado nada útil.


¡Fundé esta solución de http://robinhenniges.com/en/android6-get-mac-address-programmatically y está funcionando para mí! ¡Hope ayuda!

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


Como ya se señaló en el comentario, la dirección MAC se puede recibir a través del WifiManager .

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

Además, no olvide agregar los permisos adecuados en su AndroidManifest.xml

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

Por favor, consulte los cambios de Android 6.0 .

Para proporcionar 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 API de Wi-Fi y Bluetooth. Los métodos WifiInfo.getMacAddress () y BluetoothAdapter.getAddress () ahora devuelven un valor constante de 02: 00: 00: 00: 00: 00.

Para acceder a los identificadores de hardware de los dispositivos externos cercanos a través de escaneos Bluetooth y Wi-Fi, su aplicación ahora debe tener los permisos ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION.


Creo que acabo de encontrar una forma de leer las direcciones MAC sin permiso de LOCATION: Ejecutar ip addr y analizar su salida. (Probablemente podrías hacer lo similar al mirar el código fuente de este binario)



Probé este código yo mismo y le dará la dirección MAC o WiFi lo que esté disponible.

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


Puedes obtener la dirección MAC:

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

Establecer permiso en Menifest.xml

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


Tomado de las fuentes de Android here . Este es el código real que muestra su DIRECCIÓN MAC en la aplicación de configuración del sistema.

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


Ya no puede obtener la dirección MAC de hardware de un dispositivo Android. Los métodos WifiInfo.getMacAddress () y BluetoothAdapter.getAddress () devolverán 02: 00: 00: 00: 00: 00. Esta restricción se introdujo en Android 6.0.

Pero Rob Anderson encontró una solución que funciona para <Marshmallow: https://.com/a/35830358


Está trabajando con 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 ""; } }


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

tener otros camino here


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