From 3b0c9886d4146ebbc61ca2cac543ffc3c30792f9 Mon Sep 17 00:00:00 2001 From: Nishant Srivastava Date: Tue, 12 Jul 2016 09:41:03 +0530 Subject: [PATCH] [*] fixes issue #10 --- .../easydeviceinfo/EasyBluetoothMod.java | 13 +++- .../easydeviceinfo/EasyNetworkMod.java | 61 ++++++++++--------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/library/src/main/java/github/nisrulz/easydeviceinfo/EasyBluetoothMod.java b/library/src/main/java/github/nisrulz/easydeviceinfo/EasyBluetoothMod.java index 13200fb..ed6db49 100644 --- a/library/src/main/java/github/nisrulz/easydeviceinfo/EasyBluetoothMod.java +++ b/library/src/main/java/github/nisrulz/easydeviceinfo/EasyBluetoothMod.java @@ -20,6 +20,7 @@ import android.bluetooth.BluetoothAdapter; import android.content.Context; import android.content.pm.PackageManager; +import android.os.Build; /** * The type Easy bluetooth mod. @@ -45,8 +46,16 @@ public EasyBluetoothMod(Context context) { String result = null; if (context.checkCallingOrSelfPermission(Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED) { - BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter(); - result = bta.getAddress(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // Hardware ID are restricted in Android 6+ + // https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id + // Getting bluetooth mac via reflection for devices with Android 6+ + result = android.provider.Settings.Secure.getString(context.getContentResolver(), + "bluetooth_address"); + } else { + BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter(); + result = bta != null ? bta.getAddress() : null; + } } return CheckValidityUtil.checkValidData(result); } diff --git a/library/src/main/java/github/nisrulz/easydeviceinfo/EasyNetworkMod.java b/library/src/main/java/github/nisrulz/easydeviceinfo/EasyNetworkMod.java index 2bad2f6..a1c7212 100644 --- a/library/src/main/java/github/nisrulz/easydeviceinfo/EasyNetworkMod.java +++ b/library/src/main/java/github/nisrulz/easydeviceinfo/EasyNetworkMod.java @@ -22,12 +22,14 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; +import android.os.Build; import android.telephony.TelephonyManager; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Collections; +import java.util.Enumeration; import java.util.List; /** @@ -231,42 +233,45 @@ public String getIPv6Address() { */ @SuppressWarnings("MissingPermission") public String getWifiMAC() { String result = null; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (context.checkCallingOrSelfPermission(Manifest.permission.ACCESS_WIFI_STATE) + == PackageManager.PERMISSION_GRANTED) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // Hardware ID are restricted in Android 6+ + // https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id Enumeration interfaces = null; try { - interfaces = NetworkInterface.getNetworkInterfaces(); + interfaces = NetworkInterface.getNetworkInterfaces(); } catch (SocketException e) { - e.printStackTrace(); + e.printStackTrace(); } while (interfaces != null && interfaces.hasMoreElements()) { - NetworkInterface iF = interfaces.nextElement(); + NetworkInterface networkInterface = interfaces.nextElement(); - byte[] addr = new byte[0]; - try { - addr = iF.getHardwareAddress(); - } catch (SocketException e) { - e.printStackTrace(); - } - if (addr == null || addr.length == 0) { - continue; - } + byte[] addr = new byte[0]; + try { + addr = networkInterface.getHardwareAddress(); + } catch (SocketException e) { + e.printStackTrace(); + } + if (addr == null || addr.length == 0) { + continue; + } - StringBuilder buf = new StringBuilder(); - for (byte b : addr) { - buf.append(String.format("%02X:", b)); - } - if (buf.length() > 0) { - buf.deleteCharAt(buf.length() - 1); - } - String mac = buf.toString(); - result = iF.getName().equals("wlan0") ? mac : result; - } - } else { - if (context.checkCallingOrSelfPermission(Manifest.permission.ACCESS_WIFI_STATE) - == PackageManager.PERMISSION_GRANTED) { - WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); - result = wm.getConnectionInfo().getMacAddress(); + StringBuilder buf = new StringBuilder(); + for (byte b : addr) { + buf.append(String.format("%02X:", b)); + } + if (buf.length() > 0) { + buf.deleteCharAt(buf.length() - 1); + } + String mac = buf.toString(); + String wifiInterfaceName = "wlan0"; + result = wifiInterfaceName.equals(networkInterface.getName()) ? mac : result; } + } else { + WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + result = wm.getConnectionInfo().getMacAddress(); + } } return CheckValidityUtil.checkValidData(result); }