The automatic recognition of floor plans, locations (a.k.a. venues) and indoor-outdoor-transitions are handled in the IndoorAtlas SDK withIARegion events

/** Minimal floor detection example */
private IARegion.Listener mRegionListener = new IARegion.Listener() {
    IARegion mCurrentFloorPlan = null;

    public void onEnterRegion(IARegion region) {
        if (region.getType() == IARegion.TYPE_FLOOR_PLAN) {
            Log.d(TAG, "Entered " + region.getName());
            Log.d(TAG, "floor plan ID: " + region.getId());
            mCurrentFloorPlan = region;

    public void onExitRegion(IARegion region) {}

Region listeners are also registered to the IALocationManager


Note that there are several complete examples in the IndoorAtlas Android Examples

LockFloor aka Disabling automatic floor detection

Even though this is not recommended, you can substitute IndoorAtlas floor detection with your own by providing an explicit floor number.

Locking positioning can be done by using the new lockFloor method in IALocationManager. In addition to locking, method unlockFloor is provided so positioning can be unlocked from the specific floor.

// Lock position to floor number 3

// Unlock positioning so floor level is detected automatically