I'm trying to create an android application to detect Gimbal based beacons using the Gimbal sdk but my application cant be able to detect the beacon. But if I try using BluetoothGATT, I can be able to detect the beacon. Following is the part of my code that listens to beacon events. API key verification is successful but still it can't be able to display the proximity.
public class MainActivity extends Activity {
private PlaceManager placeManager;
private PlaceEventListener placeEventListener;
private BeaconEventListener beaconEventListener;
private BeaconManager beaconManager;
private String TAG = "beacon";
public ArrayAdapter<String> listAdapter;
public ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
Gimbal.setApiKey(getApplication(),
"MY API KEY ");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
monitorPlace();
listenBeacon();
CommunicationManager.getInstance().startReceivingCommunications();
}
private void listenBeacon() {
BeaconEventListener beaconEventListener = getBeaconEventListener();
BeaconManager beaconManager = new BeaconManager();
beaconManager.addListener(beaconEventListener);
beaconManager.startListening();
}
private void monitorPlace() {
placeEventListener = getPlaceEventListener();
// placeManager = PlaceManager.getInstance();
// placeManager.addListener(placeEventListener);
placeManager = PlaceManager.getInstance();
placeManager.addListener(placeEventListener);
placeManager.startMonitoring();
}
private void initView() {
GimbalLogConfig.enableUncaughtExceptionLogging();
listAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(listAdapter);
listAdapter.add(" Gimbal API Key got Set Successfuly");
listAdapter.notifyDataSetChanged();
GimbalDebugger.enableBeaconSightingsLogging();
}
private BeaconEventListener getBeaconEventListener() {
Log.i(TAG, "BeaconEventListener started sucessfully...");
BeaconEventListener beaconSightingListener = new BeaconEventListener() {
@Override
public void onBeaconSighting(BeaconSighting beaconSighting) {
super.onBeaconSighting(beaconSighting);
listAdapter.add(String.format("Name of Beacon is %s",
beaconSighting.getBeacon().getName()));
listAdapter.add(String.format("UUID is %s", beaconSighting
.getBeacon().getUuid()));
listAdapter.add(String.format("RSSI is %s",
beaconSighting.getRSSI()));
listAdapter.add(String.format("Battery Level is %s",
beaconSighting.getBeacon().getBatteryLevel()));
listAdapter.add(String.format("Temprature data is %s",
beaconSighting.getBeacon().getTemperature()));
}
};
}
private PlaceEventListener getPlaceEventListener() {
PlaceEventListener obj = new PlaceEventListener() {
@Override
public void onBeaconSighting(BeaconSighting sight, List<Visit> visit) {
super.onBeaconSighting(sight, visit);
listAdapter.add(String.format("Beacon Found: %s",
sight.getBeacon()));
listAdapter.add(String.format("Name of Beacon is %s", sight
.getBeacon().getName()));
listAdapter.add(String.format("Identifier is %s", sight
.getBeacon().getIdentifier()));
listAdapter.add(String.format("RSSI is %s", sight.getRSSI()));
listAdapter.add(String.format("UUID is %s", sight.getBeacon()
.getUuid()));
listAdapter.add(String.format("Temprature is%s", sight
.getBeacon().getTemperature()));
listAdapter.add(String.format("BatteryLevel is %s", sight
.getBeacon().getBatteryLevel()));
listAdapter.add(String.format("Icon URL is %s", sight
.getBeacon().getIconURL()));
listAdapter.add(String.format("Start Visit for %s", visit
.iterator().toString()));
}
// @Override
public void onVisitStart(Visit visit) {
super.onVisitStart(visit);
listAdapter.add(String.format("Start Visit for %s", visit
.getPlace().getName()));
Toast.makeText(getApplicationContext(),
visit.getPlace().getName(), Toast.LENGTH_SHORT).show();
listAdapter.notifyDataSetChanged();
}
@Override
public void onVisitEnd(Visit visit) {
// TODO Auto-generated method stub
super.onVisitEnd(visit);
listAdapter.add(String.format("End Visit for %s", visit
.getPlace().getName()));
listAdapter.notifyDataSetChanged();
}
};
return obj;
}
}
listAdapter.notifyDataSetChanged();
in theonBeaconSighting()
method. Could it be that it is just not displaying the beacons, but they're detected? Did you define places in GimbalManager? My suggestion is to strip off all the code that is not directly used for plain beacon detection (so leave only BeaconEventListener, and remove PlaceEventListener and CommunicationsManager) and see how it goes. Did you check if you have added all needed permissions and features in AndroidManifest? Did you have a look at the Gimbal sample app, how it's done there? – Glimp