2012-05-18 6 views
3

J'essaie de récupérer l'adresse MAC d'un appareil Android. Ceci est généralement possible via l'API WiFiManager si le WiFi est activé.Comment récupérer l'adresse MAC WiFi Direct?

Est-il possible d'obtenir l'adresse MAC si connexion Wi-Fi est désactivé et connexion Wi-Fi Direct est activé? WiFi ET WiFi Direct ne peut pas être allumé en même temps sur mon téléphone.

Merci

Répondre

2

Le addresss mac de connexion Wi-Fi est différente de celle du WiFi Direct. Habituellement, les deux premières lettres peuvent être différentes. Faites attention à cela.

0

La connexion Wi-Fi Direct adresse mac va être différent. Il est expliqué magnifiquement par @auselen ici https://stackoverflow.com/a/14480530/3167704.

Je viens de comprendre un moyen de récupérer WiFi Direct adresse mac. Ce n'est pas joli mais fait le travail. Voici le code,

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

Nooon ... C'est juste trop laid ... * soupir *. Il doit y avoir une autre façon ... –

7

J'avais cherché ceci pendant mon projet. Mes exigences étaient d'identifier de manière unique les périphériques dans un réseau ad hoc P2p formé avec WiFi Direct. Chaque appareil devrait identifier son appareil ami la prochaine fois qu'il sera à proximité. J'avais besoin de mon propre MAC WiFi (Direct) et de mes amis pour créer une Clé pour la création de cette zone ami.

Ma recherche: La conception est telle qu'il existe un ID universel unique et un ID local. Raison: L'ID universel ne peut être utilisé que pour se connecter aux réseaux en mode Infrastructure. L'ID local peut être utilisé pour les réseaux en mode "ad-hoc" (périphérique à périphérique). Dans ce mode ad-hoc, il existe des possibilités qu'un même périphérique puisse appartenir simultanément à plusieurs groupes ad-hoc. Pour prendre en charge ces opérations simultanées, les périphériques P2p prennent en charge plusieurs entités MAC, éventuellement sur des canaux différents.

  • Pour chaque session, un groupe persistant peut utiliser un autre canal et le dispositif MAC pour chaque session.
  • appareils P2P utilisent leur adresse MAC globale comme Device ID lors de la découverte et à la négociation, et une adresse MAC locale temporaire pour tous les cadres au sein d'un groupe. Cependant, il n'y a AUCUN moyen simple d'obtenir sa propre adresse MAC WiFi P2p. Issue 53437: Android.

    Dans cette discussion question, le membre du projet de Google a suggéré que cela est possible et juste qu'il n'a pas été documentée

    Solution: Utiliser le filtre intention WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION et le supplémentaire de la WifiP2pManager.EXTRA_WIFI_P2P_DEVICE intention

    Voilà comment je l'ai utilisé dans mon projet:

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

    Espérons que cela aide quelqu'un!

  • 2

    L'adresse MAC de connexion Wi-Fi est différente de celle du WiFi Direct.

    Vous pouvez obtenir WiFi adresse directe en utilisant le code suivant:

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

    gentil, merci! –

    Questions connexes