package com.silabs.thunderboard.ble; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.RemoteException; import org.altbeacon.beacon.BeaconConsumer; import org.altbeacon.beacon.BeaconManager; import org.altbeacon.beacon.Identifier; import org.altbeacon.beacon.RangeNotifier; import org.altbeacon.beacon.Region; import org.altbeacon.beacon.startup.BootstrapNotifier; import java.util.ArrayList; import java.util.List; import timber.log.Timber; public class ThunderBoardBootstrap { private BeaconManager beaconManager; private Context context; private RangeNotifier rangeNotifier; private List<Region> regions; private boolean disabled = false; private BeaconConsumer beaconConsumer; public ThunderBoardBootstrap(Context context, RangeNotifier rangeNotifier, Region region) { this.context = context; this.rangeNotifier = rangeNotifier; beaconManager = BeaconManager.getInstanceForApplication(context); regions = new ArrayList<>(); regions.add(region); beaconConsumer = new InternalBeaconConsumer(); beaconManager.bind(beaconConsumer); Timber.d("Waiting for BeaconService connection"); } public ThunderBoardBootstrap(Context context, RangeNotifier rangeNotifier, List<Region> regions) { this.context = context; beaconManager = BeaconManager.getInstanceForApplication(context); this.regions = regions; beaconConsumer = new InternalBeaconConsumer(); beaconManager.bind(beaconConsumer); Timber.d("Waiting for BeaconService connection"); } /** * Used to disable additional bootstrap callbacks after the first is received. Unless this is called, * your application will be get additional calls as the supplied regions are entered or exited. */ public void disable() { Timber.d("Disabling region bootstrap"); if (disabled) { return; } disabled = true; try { for (Region region : regions) { beaconManager.stopMonitoringBeaconsInRegion(region); } } catch (RemoteException e) { Timber.d("Can't stop bootstrap regions"); } beaconManager.unbind(beaconConsumer); } private class InternalBeaconConsumer implements BeaconConsumer { /** * Method reserved for system use */ @Override public void onBeaconServiceConnect() { Timber.d("Activating background region monitoring"); beaconManager.setRangeNotifier(rangeNotifier); try { Identifier id1 = Identifier.parse("cef797da-2e91-4ea4-a424-f45082ac0682"); beaconManager.startRangingBeaconsInRegion(new Region("ThunderBoardUniqueId", id1, null, null)); } catch (RemoteException e) { Timber.d("Can't set up bootstrap regions, exception: %s", e.getMessage()); } } /** * Method reserved for system use */ @Override public boolean bindService(Intent intent, ServiceConnection conn, int arg2) { Timber.d("intent: %s", intent.toString()); return context.bindService(intent, conn, arg2); } /** * Method reserved for system use */ @Override public Context getApplicationContext() { return context; } /** * Method reserved for system use */ @Override public void unbindService(ServiceConnection conn) { context.unbindService(conn); } } }