Can not find Beacons using Android Bluetooth le APIs

Before using Estimote beacons, I have written an Android app using the original Android Bluetooth LE apis (https://developer.android.com/guide/topics/connectivity/bluetooth-le.html). But this app can not find the Estimote Beacons I bought. I am wondering are Estimote beacons detectable via Android’s original Bluetooth LE apis?

Thank you very much!

Yes they are. The only way to scan for BLE devices in Android is to use that API. All Estimote SDKs also use it. Have you tried to scan for beacons with them?
Without code and logs it is not possible to tell you why your app is not finding beacons. It is also possible that this may be a phone issue.

hI Pober,

Thank you very much for the reply.

I am playing with Estimote’s Location Beacons. Yes, using Estimote SDKs I can find Estimote’s Location Beacons. The problem is that I can not detect Estimote location beacons using Android’s original API, but other beacons are detectable using this API.

I am working on a Samsung Galaxy S7 mobile phone. By the way, using the phone’s own Bluetooth scanning function, I can find other beacons except for Estimote’s location beacons.

The code snippet I use to scan devices are:
bluetoothManager = (BluetoothManager) getApplicationContext().
getSystemService(Context.BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
bluetoothLeScanner.startScan(leScanCallback);

where leScanCallback extends from the ScanCallback class in Android.bluetooth.le, where I use the onScanResult callback to fetch the detected information.

Thank you very much!

On Samsung Galaxy S7 there should be no problems with scanning. If you receive onScanResult this means scanning has been properly initialized (you have location permission, adapter is on).
Location beacons can advertise different kinds of packets (iBeacon, Eddystone URL/UID/TLM, Estimtote Monitoring, Telemetry, Connectivity etc.). How do you check that scanned BLE advertisement is coming from your Location beacon and not from other device? Do you have your own packet parser?

Hi Pober,

I have not written a packet parser yet. Now I use the device name and address to distinguish where the packet is from (using ScanResult.getDevice().getName/.getAddress).

Currently I only care about rssi, I do not care about the contents in a packet.

Thank you very much!

Location beacons do not advertise their name. You need to check if service data is there under UUID 0xFE9A. If so, it is an Estimote Beacon.

scanRecord.getServiceData().contains(new ParcelUuid(UUID.fromString("0000fe9a-0000-1000-8000-00805f9b34fb")))

Hi Pober,

Thank you very much! I am wondering where could I know the information of “UUID 0xFE9A corresponds to an Estimote Becacon” other than you told me here?

And where could I know the data structure of different packets sent by Estimote Beacons?

Thank you so much!

0xFE9A is an official Estimote service UUID registered in SIG:
https://www.bluetooth.com/specifications/assigned-numbers/16-bit-uuids-for-members
Specifications of some of the Estimote packets (with parsing example in Node.JS) can be found here:

Hi Pober,

This is very helpful. Thank you very much!