Getting MAC address in Android 6.0
Please refer to Android 6.0 Changes.
To provide users with greater data protection, starting in this release, Android removes programmatic access to the device’s local hardware identifier for apps using the Wi-Fi and Bluetooth APIs. The WifiInfo.getMacAddress() and the BluetoothAdapter.getAddress() methods now return a constant value of 02:00:00:00:00:00.
To access the hardware identifiers of nearby external devices via Bluetooth and Wi-Fi scans, your app must now have the ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permissions.
How to get Wifi Mac address or something else which is unique in Android 6.0
I solve the problem the above thanks to Daniel is correct:
public static String getMacAddr() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue; //instead of wlan0 i used eth0
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";}
The issue is in Android Media Box(TV's) we should use "eth0" instead of "wlan0" and in mobile devices above 6 we should use "wlan0". Thank you.
Can one programmatically obtain the MAC address of a device running Android 6.0+?
You can use an alternative way to get the MAC addr on a Android 6.0 device.
First add Internet User-Permission to your AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Secondly,
try {
// get all the interfaces
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
//find network interface wlan0
for (NetworkInterface networkInterface : all) {
if (!networkInterface.getName().equalsIgnoreCase("wlan0")) continue;
//get the hardware address (MAC) of the interface
byte[] macBytes = networkInterface.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
//gets the last byte of b
res1.append(Integer.toHexString(b & 0xFF) + ":");
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
ex.printStackTrace();
}
Related Topics
Drawable-Hdpi, Drawable-Mdpi, Drawable-Ldpi Android
Android: Unable to Instantiate Activity/Classnotfoundexception
Phonegap Eclipse Issue - Eglcodeccommon Glutilsparamsize: Unknow Param Errors
How to Find the Logs on Android Studio
How to Resolve Java.Util.Zip.Zipexception
Android Eclipse Noclassdeffounderror for External .Jar Files
Why a New Viewmodel Is Created in Each Compose Navigation Route
How to Delete SQLite Database from Android Programmatically
Android: Why Is There No Maxheight for a View
How Does Evaluatejavascript Work
How to Get the Current Orientation (Activityinfo.Screen_Orientation_*) of an Android Device
Android Layout Folders: Layout, Layout-Port, Layout-Land
Android: Open Activity Without Save into the Stack
How to Change Action Bar Title Color in Code
Android: Display Image from Sd Card