1. Frequent usage, call Android Api:wifimanager
<uses-permission android:name= "Android.permission.ACCESS_WIFI_STATE" ></uses-permission>
Wifimanager WiFi = (wifimanager) getsystemservice (Context.wifi_service);
Wifiinfo info = Wifi.getconnectioninfo ();
return info.getmacaddress ();
This method needs to ensure that WiFi has been opened before this boot, otherwise it will return null. So you need to start the background to open WiFi and get it.
Demo Sample code:
Try to turn on WiFi
private static Boolean Tryopenmac (Wifimanager manager)
{
Boolean softopenwifi = false;
int state = Manager.getwifistate ();
if (state! = wifimanager.wifi_state_enabled && state! = wifimanager.wifi_state_enabling)
{
Manager.setwifienabled (TRUE);
Softopenwifi = true;
}
return Softopenwifi;
}
Try turning off your Mac
private static void Tryclosemac (Wifimanager manager)
{
Manager.setwifienabled (FALSE);
}
Try to get MAC address
private static String Trygetmac (Wifimanager Manager)
{
Wifiinfo wifiinfo = Manager.getconnectioninfo ();
if (Wifiinfo = = NULL | | Stringutil.isnull (Wifiinfo.getmacaddress ()))
{
return null;
}
String mac = Wifiinfo.getmacaddress (). ReplaceAll (":", ""). Trim (). toUpperCase ();
Mac = Formatidentify (MAC);
return mac;
}
Attempt to read MAC address
private static String getmacfromdevice (int internal)
{
String Mac=null;
Wifimanager Wifimanager = (wifimanager) getsystemservice (Context.wifi_service);
Mac = Trygetmac (Wifimanager);
if (! Stringutil.isnull (MAC))
{
return mac;
}
Get failed, try to open WiFi get
Boolean Isokwifi = Tryopenmac (Wifimanager);
for (int index=0;index<internal;index++)
{
Assume that the first time there is no success, the second time is 100 milliseconds delay.
if (index!=0)
{
Try
{
Thread.Sleep (100);
}
catch (Interruptedexception e)
{
E.printstacktrace ();
}
}
Mac = Trygetmac (Wifimanager);
if (! Stringutil.isnull (MAC))
{
Break
}
}
Try turning off WiFi
if (Isokwifi)
{
Tryclosemac (Wifimanager);
}
return mac;
}
==================================================================
2. query file path/sys/class/net/wlan0/address
ADB Shell cat/sys/class/net/wlan0/address
98:6c:f5:10:96:c4
However, assuming that WiFi has never been opened during this boot, the MAC address returned is different (not actual), such as the following:
Cat/sys/class/net/wlan0/address
00:90:4c:11:22:33
Demo Sample code:
String Getmac () {
String macserial = null;
String str = "";
try {
Process pp = Runtime.getruntime (). EXEC ("cat/sys/class/net/wlan0/address");
InputStreamReader ir = new InputStreamReader (Pp.getinputstream ());
LineNumberReader input = new LineNumberReader (IR);
for (; null! = str;) {
str = Input.readline ();
if (str! = null) {
Macserial = Str.trim ();
Break
}
}
} catch (IOException e) {
E.printstacktrace ();
}
return macserial;
}
==================================================================
3. Query the file "/proc/net/arp" that recorded the MAC address, but from the test results, the returned data is not the desired WiFi MAC address:
For example, the actual WiFi MAC address of the phone is 98:6c:f5:10:96:c4, but using adb shell cat Proc/net/arp returns:
Cat Proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.0.3 0x1 0x2 00:23:89:B9:1A:FD * wlan0
192.168.0.1 0x1 0x2 08:00:27:7c:65:5a * wlan0