1import kotlinx.coroutines.delay
2import kotlinx.coroutines.runBlocking
3import kotlinx.coroutines.GlobalScope
4import kotlinx.coroutines.launch
7 * MeasurementManager usage example for Kotlin
8 * Demonstrates working with sensor and signal measurements, generators, and measurement management
10class MeasurementManagerExample {
11 private var sdk: NavigineSdk? = null
12 private var locationManager: LocationManager? = null
13 private var measurementManager: MeasurementManager? = null
14 private var measurementListener: MeasurementListener? = null
18 setupMeasurementListener()
22 * Initialize SDK and get managers
24 private fun initializeSdk() {
26 // [kotlin_NavigineSdk_getInstance]
28 sdk = NavigineSdk.getInstance()
29 // [kotlin_NavigineSdk_getInstance]
31 // [kotlin_NavigineSdk_setUserHash]
33 sdk?.setUserHash("USER-HASH-HERE")
34 // [kotlin_NavigineSdk_setUserHash]
36 // [kotlin_NavigineSdk_setServer]
37 // Set server URL (optional)
38 sdk?.setServer("https://custom.navigine.com")
39 // [kotlin_NavigineSdk_setServer]
41 // [kotlin_NavigineSdk_getLocationManager]
42 // Get LocationManager for working with locations
43 locationManager = sdk?.getLocationManager()
44 // [kotlin_NavigineSdk_getLocationManager]
46 // [kotlin_NavigineSdk_getMeasurementManager]
47 // Get MeasurementManager for working with measurements
48 measurementManager = sdk?.getMeasurementManager(locationManager)
49 // [kotlin_NavigineSdk_getMeasurementManager]
51 // [kotlin_MeasurementManager_setPublishIntervalMs]
52 // Optional: interval between measurement batches sent to listeners (ms)
53 measurementManager?.setPublishIntervalMs(1000)
54 // [kotlin_MeasurementManager_setPublishIntervalMs]
56 if (locationManager != null && measurementManager != null) {
57 println("LocationManager and MeasurementManager successfully initialized")
59 } catch (e: Exception) {
60 System.err.println("Error initializing SDK: ${e.message}")
65 * Setup measurement listener
67 private fun setupMeasurementListener() {
68 measurementListener = object : MeasurementListener() {
69 // [kotlin_MeasurementListener_onSensorMeasurementDetected]
70 override fun onSensorMeasurementDetected(sensors: Map<SensorType, SensorMeasurement>) {
71 println("Sensor measurements detected")
72 demonstrateSensorMeasurements(sensors)
74 // [kotlin_MeasurementListener_onSensorMeasurementDetected]
76 // [kotlin_MeasurementListener_onSignalMeasurementDetected]
77 override fun onSignalMeasurementDetected(signals: Map<String, SignalMeasurement>) {
78 println("Signal measurements detected")
79 demonstrateSignalMeasurements(signals)
81 // [kotlin_MeasurementListener_onSignalMeasurementDetected]
86 * Demonstrate MeasurementManager methods
88 fun demonstrateMeasurementManagerMethods() {
89 val manager = measurementManager ?: run {
90 System.err.println("MeasurementManager not initialized")
94 val listener = measurementListener ?: return
96 // [kotlin_MeasurementManager_addMeasurementListener]
97 // Add measurement listener
98 manager.addMeasurementListener(listener)
99 println("Added measurement listener")
100 // [kotlin_MeasurementManager_addMeasurementListener]
102 // Demonstrate beacon generators
103 demonstrateBeaconGenerators()
105 // Demonstrate Eddystone generators
106 demonstrateEddystoneGenerators()
108 // Demonstrate Wi-Fi generators
109 demonstrateWifiGenerators()
111 // Demonstrate Wi-Fi RTT generators
112 demonstrateWifiRttGenerators()
114 // Demonstrate location generators
115 demonstrateLocationGenerators()
117 // Simulate some time passing for measurements
121 // [kotlin_MeasurementManager_removeMeasurementListener]
122 // Remove measurement listener
123 manager.removeMeasurementListener(listener)
124 println("Removed measurement listener")
125 // [kotlin_MeasurementManager_removeMeasurementListener]
130 * Demonstrate beacon generators
132 private fun demonstrateBeaconGenerators() {
133 val manager = measurementManager ?: return
135 // [kotlin_MeasurementManager_addBeaconGenerator]
136 // Add beacon generator
137 val beaconId = manager.addBeaconGenerator(
138 "12345678-1234-1234-1234-123456789012", // UUID
142 5000, // timeout (ms)
146 println("Added beacon generator with ID: $beaconId")
147 // [kotlin_MeasurementManager_addBeaconGenerator]
149 // [kotlin_MeasurementManager_removeBleGenerator]
150 // Remove specific BLE generator
151 manager.removeBleGenerator(beaconId)
152 println("Removed BLE generator: $beaconId")
153 // [kotlin_MeasurementManager_removeBleGenerator]
155 // [kotlin_MeasurementManager_removeBleGenerators]
156 // Remove all BLE generators
157 manager.removeBleGenerators()
158 println("Removed all BLE generators")
159 // [kotlin_MeasurementManager_removeBleGenerators]
163 * Demonstrate Eddystone generators
165 private fun demonstrateEddystoneGenerators() {
166 val manager = measurementManager ?: return
168 // [kotlin_MeasurementManager_addEddystoneGenerator]
169 // Add Eddystone generator
170 val eddystoneId = manager.addEddystoneGenerator(
171 "12345678901234567890", // namespaceId
172 "1234567890123456", // instanceId
174 3000, // timeout (ms)
178 println("Added Eddystone generator with ID: $eddystoneId")
179 // [kotlin_MeasurementManager_addEddystoneGenerator]
181 // Remove Eddystone generator (uses same method as BLE)
182 manager.removeBleGenerator(eddystoneId)
183 println("Removed Eddystone generator: $eddystoneId")
187 * Demonstrate Wi-Fi generators
189 private fun demonstrateWifiGenerators() {
190 val manager = measurementManager ?: return
192 // [kotlin_MeasurementManager_addWifiGenerator]
193 // Add Wi-Fi generator
194 val wifiId = manager.addWifiGenerator(
195 "AA:BB:CC:DD:EE:FF", // MAC address
196 4000, // timeout (ms)
200 println("Added Wi-Fi generator with ID: $wifiId")
201 // [kotlin_MeasurementManager_addWifiGenerator]
203 // [kotlin_MeasurementManager_removeWifiGenerator]
204 // Remove specific Wi-Fi generator
205 manager.removeWifiGenerator(wifiId)
206 println("Removed Wi-Fi generator: $wifiId")
207 // [kotlin_MeasurementManager_removeWifiGenerator]
209 // [kotlin_MeasurementManager_removeWifiGenerators]
210 // Remove all Wi-Fi generators
211 manager.removeWifiGenerators()
212 println("Removed all Wi-Fi generators")
213 // [kotlin_MeasurementManager_removeWifiGenerators]
217 * Demonstrate Wi-Fi RTT generators
219 private fun demonstrateWifiRttGenerators() {
220 val manager = measurementManager ?: return
222 // [kotlin_MeasurementManager_addWifiRttGenerator]
223 // Add Wi-Fi RTT generator
224 val wifiRttId = manager.addWifiRttGenerator(
225 "11:22:33:44:55:66", // MAC address
226 6000, // timeout (ms)
227 1, // distMin (meters)
228 10, // distMax (meters)
234 println("Added Wi-Fi RTT generator with ID: $wifiRttId")
235 // [kotlin_MeasurementManager_addWifiRttGenerator]
237 // [kotlin_MeasurementManager_removeWifiRttGenerator]
238 // Remove specific Wi-Fi RTT generator
239 manager.removeWifiRttGenerator(wifiRttId)
240 println("Removed Wi-Fi RTT generator: $wifiRttId")
241 // [kotlin_MeasurementManager_removeWifiRttGenerator]
243 // [kotlin_MeasurementManager_removeWifiRttGenerators]
244 // Remove all Wi-Fi RTT generators
245 manager.removeWifiRttGenerators()
246 println("Removed all Wi-Fi RTT generators")
247 // [kotlin_MeasurementManager_removeWifiRttGenerators]
251 * Demonstrate location generators
253 private fun demonstrateLocationGenerators() {
254 val manager = measurementManager ?: return
256 // [kotlin_MeasurementManager_addLocationGenerator]
257 // Add location generator
258 val locationId = manager.addLocationGenerator(
263 1.0, // accMin (meters)
264 5.0, // accMax (meters)
267 println("Added location generator with ID: $locationId")
268 // [kotlin_MeasurementManager_addLocationGenerator]
270 // [kotlin_MeasurementManager_removeLocationGenerator]
271 // Remove specific location generator
272 manager.removeLocationGenerator(locationId)
273 println("Removed location generator: $locationId")
274 // [kotlin_MeasurementManager_removeLocationGenerator]
276 // [kotlin_MeasurementManager_removeLocationGenerators]
277 // Remove all location generators
278 manager.removeLocationGenerators()
279 println("Removed all location generators")
280 // [kotlin_MeasurementManager_removeLocationGenerators]
284 * Demonstrate sensor measurements
286 fun demonstrateSensorMeasurements(sensors: Map<SensorType, SensorMeasurement>) {
287 sensors.forEach { (sensorType, measurement) ->
288 // [kotlin_SensorMeasurement_getType]
290 val type = measurement.type
291 println("Sensor type: $type")
292 // [kotlin_SensorMeasurement_getType]
294 // [kotlin_SensorMeasurement_getValues]
296 val values = measurement.values
297 println("Sensor values - X: ${values.x}, Y: ${values.y}, Z: ${values.z}")
298 // [kotlin_SensorMeasurement_getValues]
300 // [kotlin_SensorMeasurement_getTime]
301 // Get measurement timestamp
302 val time = measurement.time
303 println("Measurement time: $time ms")
304 // [kotlin_SensorMeasurement_getTime]
306 // Demonstrate Vector3d properties
307 demonstrateVector3d(values)
312 * Demonstrate signal measurements
314 fun demonstrateSignalMeasurements(signals: Map<String, SignalMeasurement>) {
315 signals.forEach { (signalId, measurement) ->
316 // [kotlin_SignalMeasurement_getType]
318 val type = measurement.type
319 println("Signal type: $type")
320 // [kotlin_SignalMeasurement_getType]
322 // [kotlin_SignalMeasurement_getId]
323 // Get signal identifier
324 val id = measurement.id
325 println("Signal ID: $id")
326 // [kotlin_SignalMeasurement_getId]
328 // [kotlin_SignalMeasurement_getRssi]
330 val rssi = measurement.rssi
331 println("Signal RSSI: $rssi dBm")
332 // [kotlin_SignalMeasurement_getRssi]
334 // [kotlin_SignalMeasurement_getDistance]
335 // Get estimated distance
336 val distance = measurement.distance
337 println("Signal distance: $distance meters")
338 // [kotlin_SignalMeasurement_getDistance]
340 // [kotlin_SignalMeasurement_getTime]
341 // Get measurement timestamp
342 val time = measurement.time
343 println("Signal measurement time: $time ms")
344 // [kotlin_SignalMeasurement_getTime]
349 * Demonstrate Vector3d properties
351 private fun demonstrateVector3d(vector: Vector3d) {
352 // [kotlin_Vector3d_getX]
355 println("Vector X: $x")
356 // [kotlin_Vector3d_getX]
358 // [kotlin_Vector3d_getY]
361 println("Vector Y: $y")
362 // [kotlin_Vector3d_getY]
364 // [kotlin_Vector3d_getZ]
367 println("Vector Z: $z")
368 // [kotlin_Vector3d_getZ]
372 * Main demonstration method
374 suspend fun runExample() {
375 println("=== MeasurementManager Example ===")
377 demonstrateMeasurementManagerMethods()
379 // Wait a bit for measurements
382 println("=== Example completed ===")
387 * Function to run the example
389fun main() = runBlocking {
390 val example = MeasurementManagerExample()