diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java index 2c318a6493722db272b75afa698321e128c694c7..f0242b4ae0d86d65d73acd1aa00cbc54298ee05d 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPlugin.java @@ -129,6 +129,7 @@ class AndroidBluetoothPlugin extends BluetoothPlugin<BluetoothServerSocket> { @Nullable String getBluetoothAddress() { String address = AndroidUtils.getBluetoothAddress(appContext, adapter); + LOG.info("Bluetooth address:" + address); return address.isEmpty() ? null : address; } diff --git a/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java b/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java index 15edba9c49be5d825c2944d19422d30264b20700..7ff7037cd180e3461093a5d56c625ddac6921fb4 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java @@ -6,6 +6,7 @@ import android.os.Build; import android.provider.Settings; import java.io.File; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -41,6 +42,18 @@ public class AndroidUtils { address = Settings.Secure.getString(ctx.getContentResolver(), "bluetooth_address"); if (isValidBluetoothAddress(address)) return address; + try { + final Field mServiceField; + mServiceField = BluetoothAdapter.class.getDeclaredField("mService"); + mServiceField.setAccessible(true); + final Object mService = mServiceField.get(adapter); + if (mService == null) + return ""; + address = (String) mService.getClass().getMethod("getAddress").invoke(mService); + if (isValidBluetoothAddress(address)) return address; + } catch (Exception e) { + // Nothing we can do about it. + } // Let the caller know we can't find the address return ""; }