2016-04-08 1 views
1

J'ai essayé plusieurs choses pour obtenir le MAC sur Android 6.0 sans succès):adresses Mac sur Marshmallow Xamarin

J'ai déjà cette autorisation:

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

Et voici ma Code:

public string GetMacAdress(Context context) 
{ 
    string mac = GetMacAddressLegacy(context); 

    if (mac == "02:00:00:00:00:00") 
    { 
     NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); 

     foreach (NetworkInterface nif in interfaces) 
     { 
      if (!nif.Name.ToLower().Contains("wlan")) continue; 

      var physicalAddress = nif.GetPhysicalAddress(); 
      byte[] macBytes = physicalAddress.GetAddressBytes(); 
      if (macBytes == null) continue; 

      string macString = BitConverter.ToString(macBytes); 
      if (!string.IsNullOrWhiteSpace(macString)) mac = macString.Trim().ToUpper().Replace("-", ":"); 
     } 
    } 

    return mac; 
} 

[Obsolete] 
public string GetMacAddressLegacy(Context context) 
{ 
    string toReturn = "02:00:00:00:00:00"; 
    if (DetectWifiNetwork()) 
    { 
     isConected = true; 
     var telephonyMgr = (WifiManager)context.GetSystemService(Context.WifiService); 
     toReturn = telephonyMgr.ConnectionInfo.MacAddress; 
     if (!string.IsNullOrWhiteSpace(toReturn)) toReturn = toReturn.Trim().ToUpper(); 
    } 
    else 
    { 
     isConected = false; 
    } 
    return toReturn; 
} 

Mais cette ligne: byte[] macBytes = physicalAddress.GetAddressBytes(); retourne un tableau vide.

Quelqu'un pourrait-il y remédier?

Répondre

1

Essayez d'utiliser ce code:

public string GetMacAdress(Context context) 
{ 
    string mac = GetMacAddressLegacy(context); 

    if (mac == "02:00:00:00:00:00") 
    { 
     var interfaces = Java.Net.NetworkInterface.NetworkInterfaces; 

     foreach (var nif in interfaces) 
     { 
      if (!nif.Name.ToLower().Contains("wlan")) continue; 

      byte[] macBytes = nif.GetHardwareAddress(); 

      string macString = BitConverter.ToString(macBytes); 
      if (!string.IsNullOrWhiteSpace(macString)) 
       mac = macString.Trim().ToUpper().Replace("-", ":"); 
     } 
    } 

    return mac; 
} 
-1

bien utiliser ce système est assez pour le faire fonctionner:

Autorisations:

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

code:

WifiManager wManager = (WifiManager)GetSystemService(Context.WifiService); 
WifiInfo wInfo = wManager.ConnectionInfo; 
button.Text = wInfo.MacAddress; 

testez-vous sur un vrai appareil ou sur un simulateur?

+1

Il ne fonctionnera pas sur la version sdk = <23 –

2

Essayez d'utiliser cette méthode

public static string getMacAddress() 
{ 
    string macAddress = string.Empty; 

    var all = Collections.List(Java.Net.NetworkInterface.NetworkInterfaces); 

    foreach (var interfaces in all) 
    { 
     if (!(interfaces as Java.Net.NetworkInterface).Name.Contains("wlan0")) continue; 

     var macBytes = (interfaces as 
     Java.Net.NetworkInterface).GetHardwareAddress(); 
     if (macBytes == null) continue; 

     var sb = new System.Text.StringBuilder(); 
     foreach (var b in macBytes) 
     { 
      string convertedByte = string.Empty; 
      convertedByte = (b & 0xFF).ToString("X2") + ":"; 

      if(convertedByte.Length == 1) 
      { 
       convertedByte.Insert(0, "0"); 
      } 
      sb.Append(convertedByte); 
     } 

     macAddress = sb.ToString().Remove(sb.Length - 1); 

     return macAddress; 
    } 
    return "02:00:00:00:00:00"; 
} 
+1

de travaux comme prévu! –