¿Cómo recuperar la dirección MAC directa de WiFi?
Estoy tratando de recuperar la dirección MAC de un dispositivo Android. Normalmente esto es posible a través de WiFiManager API si WiFi está activado.
¿Hay alguna manera de obtener la dirección MAC si WiFi está apagado y WiFi Direct está encendido? WiFi y WiFi Direct no puede estar al mismo tiempo en mi teléfono.
- Conectarse a dispositivos Android utilizando wifi directo sin necesidad de ayuda
- Android 7.1.1 Wifi Direct no puede crear grupo
- WifiDirectActivity Alteración de la muestra: Transfiere un ArrayList <String> p2p
- ¿Cómo puedo transferir archivos entre dispositivos Android mediante Wi-Fi Direct?
- ¿Dónde puedo obtener un proyecto de aplicación Android Wi-Fi Direct demo para ADT?
Gracias
- Olvidando las conexiones directas WiFi anteriores
- Android - crear grupo por wifi p2p directo para varios dispositivos
- Conexión de varios dispositivos y transferencia de datos a través de Wifi Direct sin punto de acceso
- ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
- ¿Podemos conectar más de 10 dispositivos con wi-fi hot-spot en Android
- ¿Cómo hacer un groupOwner de dispositivo en WifiDirect?
- Paquetes UDP (vía WiFi Direct) nunca llegan
- WiFiDirect discoverServices sigue fallando con error 3 (NO_SERVICE_REQUESTS)
Había estado buscando esto durante mi proyecto. Mis requisitos eran identificar únicamente los dispositivos en una red adhoc P2p formada con WiFi Direct. Cada dispositivo debe identificar su dispositivo de amigo la próxima vez cuando se trata de proximidad. Necesitaba mi propio WiFi (Direct) MAC y mis amigos para crear una clave para esta creación de zona de amigo.
Mi investigación: El diseño es de tal manera que existe una identificación universal única y una identificación local. Razón: El ID universal sólo se puede utilizar para conectarse a redes de modo Infraestructura. El ID local se podría utilizar para las redes en modo "ad-hoc" (dispositivo a dispositivo). En este modo ad-hoc, existen posibilidades de que un único dispositivo pueda pertenecer simultáneamente a varios grupos ad-hoc.
- Por tanto, para soportar estas operaciones concurrentes, los dispositivos P2p admiten varias entidades MAC, posiblemente en diferentes canales.
- Para cada sesión, un grupo persistente PUEDE utilizar un canal diferente y un dispositivo MAC para cada sesión.
- Los dispositivos P2P usan su dirección MAC global como ID de dispositivo durante la detección y negociación y una dirección MAC local temporal para todos los marcos de un grupo. Entendido desde aquí
Sin embargo, no hay manera directa de obtener su propio WiFi P2p MAC dirección. Número 53437: Android .
En este tema de discusión, el miembro del proyecto de google ha sugerido que esto es posible y sólo que no ha sido documentado
Solución: Utilizando el filtro intencional
WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
y el extra de la intenciónWifiP2pManager.EXTRA_WIFI_P2P_DEVICE
Así es como lo he usado en mi proyecto:
@Override public void onReceive(Context context, Intent intent) { .... .... String action = intent.getAction(); if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION .equals(action)) { WifiP2pDevice device = (WifiP2pDevice) intent .getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE); String myMac = device.deviceAddress; Log.d(TAG, "Device WiFi P2p MAC Address: " + myMac); /* Saving WiFi P2p MAC in SharedPref */ sharedPref = context.getSharedPreferences(context.getString(R.string.sp_file_name), Context.MODE_PRIVATE); String MY_MAC_ADDRESS = sharedPref.getString(context.getString(R.string.sp_field_my_mac), null); if (MY_MAC_ADDRESS == null || MY_MAC_ADDRESS != myMac) { SharedPreferences.Editor editor = sharedPref.edit(); editor.putString(context.getString(R.string.sp_field_my_mac), myMac); editor.commit(); }
Espero que esto ayude a alguien!
Las direcciones MAC de WiFi es diferente de la de WiFi Direct. Normalmente las primeras 2 letras pueden ser diferentes. Ten cuidado con eso.
La dirección MAC de WiFi es diferente a la de WiFi Direct.
Usted puede conseguir la dirección directa de WiFi usando el siguiente código:
public String getWFDMacAddress(){ try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface ntwInterface : interfaces) { if (ntwInterface.getName().equalsIgnoreCase("p2p0")) { byte[] byteMac = ntwInterface.getHardwareAddress(); if (byteMac==null){ return null; } StringBuilder strBuilder = new StringBuilder(); for (int i=0; i<byteMac.length; i++) { strBuilder.append(String.format("%02X:", byteMac[i])); } if (strBuilder.length()>0){ strBuilder.deleteCharAt(strBuilder.length()-1); } return strBuilder.toString(); } } } catch (Exception e) { Log.d(TAG, e.getMessage()); } return null; }
La dirección WiFi Direct MAC va a ser diferente. Se explica maravillosamente por @auselen aquí https://stackoverflow.com/a/14480530/3167704 .
Acabo de averiguar una manera de recuperar la dirección WiFi Direct MAC. No es bonito, pero consigue el trabajo hecho. Aquí está el código,
final WifiP2pManager p2pManager = (WifiP2pManager) getSystemService(WIFI_P2P_SERVICE); final WifiP2pManager.Channel channel = p2pManager.initialize(this, getMainLooper(), null); p2pManager.createGroup(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { p2pManager.requestGroupInfo(channel, new WifiP2pManager.GroupInfoListener() { @Override public void onGroupInfoAvailable(WifiP2pGroup wifiP2pGroup) { Log.i("", wifiP2pGroup.getOwner().deviceAddress); // Following removal necessary to not have the manager busy for other stuff, subsequently p2pManager.removeGroup(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { Log.i("", "Removed"); } @Override public void onFailure(int i) { Log.i("", "Failed " + i); } }); } }); } @Override public void onFailure(int i) { Log.i("", String.valueOf(i)); } });
- Aplicación de animaciones al cambiar la visibilidad de una vista
- Abrir la pantalla de configuración para activar el método de entrada