> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ones1ght.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Android SDK

## 0.0.11

* Resuming positioning now restarts the engine when it has stopped producing positions (a session error, or no position for more than 5 seconds)

## 0.0.10

* The positioning engine now runs only while the app is on screen — calling `begin()` in the background starts the engine when the app comes to the foreground

## 0.0.9

* Fixed positioning not starting on some devices such as the Galaxy S25+ (repeated `E4001`)

## 0.0.8

* Narrowed the SDK's Gson R8 rules to the SDK itself — add rules for your app's Gson models in the app
* Fixed requests sent during a dropped connection being re-sent, duplicating events, coordinates and profiles

## 0.0.7

* **Breaking** Internal types are no longer public: `ApiClient` constructor, `IdentityStore`, `SdkDefaults`, `MockPositioningProvider`, etc.
* **Breaking** `ConfigChange.Companion` (empty companion) removed
* **Breaking** `PositioningProvider.applyZones` removed from the public contract — zones now arrive through `apply(PositioningConfig(zones = …))`
* **Breaking** `building(buildingId = …)` → `building(id = …)` (parameter name only; positional calls are unchanged)
* **Breaking** The first `setFloorMap(floor)` call without a building now raises `SdkError.BuildingNotSet` (`E3001`)
* **Breaking** `when` expressions over enums such as `SdkErrorCode` need an `else` branch
* `permissions(activity)` → `requestPermission(activity)`
* `getProfile()` → `fetchProfile()`
* `putProfile()` → `replaceProfile()`
* `send()` → `uploadPendingPositions()`
* `empty()` → `discardPendingPositions()`
* `ApiClient.DEFAULT_BASE_URL` → `OneS1ght.DEFAULT_BASE_URL`
* Old names keep working as `@Deprecated`; see the [SDK CHANGELOG 0.0.7](https://github.com/onecheck-inc/OneS1ght-Android-SDK/blob/main/CHANGELOG.md#007--2026-10-02) for the full list
* Added `FloorSession.onStopped` — delivers why the session stopped (`ENDED` · `ENGINE_FAILED`)
* Added `FloorSession.onFloorDetected` — delivers the floor ID the engine found
* Custom providers now support zone callbacks through `onFloorDetected` and `onEmit`
* If the engine stops it restarts automatically; on failure the session ends with `onStopped(ENGINE_FAILED)`
* `begin()` without a floor no longer reports `E3001` to the server
* `identify` can now be called before `initialize`
* Pause now persists across a trip to the background (same as iOS)
* `ApiError.message` is now English plus the error code
* The `baseUrl` passed to `initialize` is now used for space lookups too
* Fixed one broken item failing the whole list in a response
* Fixed dwell time being reset on `refreshZones()`
* Fixed a crash when `empty()` was called during a coordinate upload
* Fixed floor lookups using the old building after `reset()`

## 0.0.6

* `when` expressions over `SdkErrorCode` without `else` need a `BLUETOOTH_OFF` branch
* Bluetooth off is now logged as `E2004`, separate from permission denied (`E2003`) (same as iOS)

## 0.0.5

* Apps can now create the positioning provider directly with `UwbPositioningProvider(context)`
* Added `UwbPositioningProvider.isSupported(context)` to check whether the device can position
* Added observable provider state (`phase`, `latestPosition`, `detectedFloorId`, etc.) and `StateFlow`
* Added provider hooks (`onFloorDetected`, `onEngineError`, `onZoneEvent`, `onLog`)
* `startDetection()` and `stopDetection()` can start just the engine first
* `kotlinx-coroutines-core` (1.9.0) is now an api dependency
* Unlike iOS, `license` is not exposed — the SDK sets the engine license from the console value

## 0.0.4

* Lowered the package `minSdk` from 37 to 26 (Android 8.0) — you can restore your app's `minSdk`
* Below Android 17 only positioning is disabled; the app keeps running (`E2001`)

## 0.0.3

* Raised the package `minSdk` to 37 — 0.0.4 or later recommended
* Replaced the positioning engine with the unified engine used by iOS (0.1.23)
* The engine finds the floor by itself over BLE — `setFloorMap` is optional, for zone events
* Zone detection moved to the engine geofence — console zone detection parameters are no longer used
* Added `BLUETOOTH_SCAN` to the permission request
* Added log codes `E3007`, `E3008`, `E3009` and `E4004`; `E4003` no longer occurs

## 0.0.2

* Artifact coordinates changed to `com.ones1ght.sdk:android` — only `mavenCentral()` is needed
* R8/ProGuard release builds may fail — 0.0.4 or later recommended
* First Maven Central release; positioning engine AAR bundled
* `-sources.jar` and `-javadoc.jar` published alongside

## 0.0.1

* First public Android SDK — same features and server contract as the iOS SDK (0.1.23)
* Kotlin `suspend` and Java `Callback<T>` supported
* Positioning works on Android 17 (API 37) and later with UWB DL-TDoA support
* Unlike iOS, `initialize` takes a `Context` argument
* Unlike iOS, the permission request takes an `Activity` argument


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.