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 if (locationManager != null && measurementManager != null) {
52 println("LocationManager and MeasurementManager successfully initialized")
54 } catch (e: Exception) {
55 System.err.println("Error initializing SDK: ${e.message}")
60 * Setup measurement listener
62 private fun setupMeasurementListener() {
63 measurementListener = object : MeasurementListener() {
64 // [kotlin_MeasurementListener_onSensorMeasurementDetected]
65 override fun onSensorMeasurementDetected(sensors: Map<SensorType, SensorMeasurement>) {
66 println("Sensor measurements detected")
67 demonstrateSensorMeasurements(sensors)
69 // [kotlin_MeasurementListener_onSensorMeasurementDetected]
71 // [kotlin_MeasurementListener_onSignalMeasurementDetected]
72 override fun onSignalMeasurementDetected(signals: Map<String, SignalMeasurement>) {
73 println("Signal measurements detected")
74 demonstrateSignalMeasurements(signals)
76 // [kotlin_MeasurementListener_onSignalMeasurementDetected]
81 * Demonstrate MeasurementManager methods
83 fun demonstrateMeasurementManagerMethods() {
84 val manager = measurementManager ?: run {
85 System.err.println("MeasurementManager not initialized")
89 val listener = measurementListener ?: return
91 // [kotlin_MeasurementManager_addMeasurementListener]
92 // Add measurement listener
93 manager.addMeasurementListener(listener)
94 println("Added measurement listener")
95 // [kotlin_MeasurementManager_addMeasurementListener]
97 // Demonstrate beacon generators
98 demonstrateBeaconGenerators()
100 // Demonstrate Eddystone generators
101 demonstrateEddystoneGenerators()
103 // Demonstrate Wi-Fi generators
104 demonstrateWifiGenerators()
106 // Demonstrate Wi-Fi RTT generators
107 demonstrateWifiRttGenerators()
109 // Demonstrate location generators
110 demonstrateLocationGenerators()
112 // Simulate some time passing for measurements
116 // [kotlin_MeasurementManager_removeMeasurementListener]
117 // Remove measurement listener
118 manager.removeMeasurementListener(listener)
119 println("Removed measurement listener")
120 // [kotlin_MeasurementManager_removeMeasurementListener]
125 * Demonstrate beacon generators
127 private fun demonstrateBeaconGenerators() {
128 val manager = measurementManager ?: return
130 // [kotlin_MeasurementManager_addBeaconGenerator]
131 // Add beacon generator
132 val beaconId = manager.addBeaconGenerator(
133 "12345678-1234-1234-1234-123456789012", // UUID
137 5000, // timeout (ms)
141 println("Added beacon generator with ID: $beaconId")
142 // [kotlin_MeasurementManager_addBeaconGenerator]
144 // [kotlin_MeasurementManager_removeBleGenerator]
145 // Remove specific BLE generator
146 manager.removeBleGenerator(beaconId)
147 println("Removed BLE generator: $beaconId")
148 // [kotlin_MeasurementManager_removeBleGenerator]
150 // [kotlin_MeasurementManager_removeBleGenerators]
151 // Remove all BLE generators
152 manager.removeBleGenerators()
153 println("Removed all BLE generators")
154 // [kotlin_MeasurementManager_removeBleGenerators]
158 * Demonstrate Eddystone generators
160 private fun demonstrateEddystoneGenerators() {
161 val manager = measurementManager ?: return
163 // [kotlin_MeasurementManager_addEddystoneGenerator]
164 // Add Eddystone generator
165 val eddystoneId = manager.addEddystoneGenerator(
166 "12345678901234567890", // namespaceId
167 "1234567890123456", // instanceId
169 3000, // timeout (ms)
173 println("Added Eddystone generator with ID: $eddystoneId")
174 // [kotlin_MeasurementManager_addEddystoneGenerator]
176 // Remove Eddystone generator (uses same method as BLE)
177 manager.removeBleGenerator(eddystoneId)
178 println("Removed Eddystone generator: $eddystoneId")
182 * Demonstrate Wi-Fi generators
184 private fun demonstrateWifiGenerators() {
185 val manager = measurementManager ?: return
187 // [kotlin_MeasurementManager_addWifiGenerator]
188 // Add Wi-Fi generator
189 val wifiId = manager.addWifiGenerator(
190 "AA:BB:CC:DD:EE:FF", // MAC address
191 4000, // timeout (ms)
195 println("Added Wi-Fi generator with ID: $wifiId")
196 // [kotlin_MeasurementManager_addWifiGenerator]
198 // [kotlin_MeasurementManager_removeWifiGenerator]
199 // Remove specific Wi-Fi generator
200 manager.removeWifiGenerator(wifiId)
201 println("Removed Wi-Fi generator: $wifiId")
202 // [kotlin_MeasurementManager_removeWifiGenerator]
204 // [kotlin_MeasurementManager_removeWifiGenerators]
205 // Remove all Wi-Fi generators
206 manager.removeWifiGenerators()
207 println("Removed all Wi-Fi generators")
208 // [kotlin_MeasurementManager_removeWifiGenerators]
212 * Demonstrate Wi-Fi RTT generators
214 private fun demonstrateWifiRttGenerators() {
215 val manager = measurementManager ?: return
217 // [kotlin_MeasurementManager_addWifiRttGenerator]
218 // Add Wi-Fi RTT generator
219 val wifiRttId = manager.addWifiRttGenerator(
220 "11:22:33:44:55:66", // MAC address
221 6000, // timeout (ms)
222 1, // distMin (meters)
223 10, // distMax (meters)
229 println("Added Wi-Fi RTT generator with ID: $wifiRttId")
230 // [kotlin_MeasurementManager_addWifiRttGenerator]
232 // [kotlin_MeasurementManager_removeWifiRttGenerator]
233 // Remove specific Wi-Fi RTT generator
234 manager.removeWifiRttGenerator(wifiRttId)
235 println("Removed Wi-Fi RTT generator: $wifiRttId")
236 // [kotlin_MeasurementManager_removeWifiRttGenerator]
238 // [kotlin_MeasurementManager_removeWifiRttGenerators]
239 // Remove all Wi-Fi RTT generators
240 manager.removeWifiRttGenerators()
241 println("Removed all Wi-Fi RTT generators")
242 // [kotlin_MeasurementManager_removeWifiRttGenerators]
246 * Demonstrate location generators
248 private fun demonstrateLocationGenerators() {
249 val manager = measurementManager ?: return
251 // [kotlin_MeasurementManager_addLocationGenerator]
252 // Add location generator
253 val locationId = manager.addLocationGenerator(
258 1.0, // accMin (meters)
259 5.0, // accMax (meters)
262 println("Added location generator with ID: $locationId")
263 // [kotlin_MeasurementManager_addLocationGenerator]
265 // [kotlin_MeasurementManager_removeLocationGenerator]
266 // Remove specific location generator
267 manager.removeLocationGenerator(locationId)
268 println("Removed location generator: $locationId")
269 // [kotlin_MeasurementManager_removeLocationGenerator]
271 // [kotlin_MeasurementManager_removeLocationGenerators]
272 // Remove all location generators
273 manager.removeLocationGenerators()
274 println("Removed all location generators")
275 // [kotlin_MeasurementManager_removeLocationGenerators]
279 * Demonstrate sensor measurements
281 fun demonstrateSensorMeasurements(sensors: Map<SensorType, SensorMeasurement>) {
282 sensors.forEach { (sensorType, measurement) ->
283 // [kotlin_SensorMeasurement_getType]
285 val type = measurement.type
286 println("Sensor type: $type")
287 // [kotlin_SensorMeasurement_getType]
289 // [kotlin_SensorMeasurement_getValues]
291 val values = measurement.values
292 println("Sensor values - X: ${values.x}, Y: ${values.y}, Z: ${values.z}")
293 // [kotlin_SensorMeasurement_getValues]
295 // [kotlin_SensorMeasurement_getTime]
296 // Get measurement timestamp
297 val time = measurement.time
298 println("Measurement time: $time ms")
299 // [kotlin_SensorMeasurement_getTime]
301 // Demonstrate Vector3d properties
302 demonstrateVector3d(values)
307 * Demonstrate signal measurements
309 fun demonstrateSignalMeasurements(signals: Map<String, SignalMeasurement>) {
310 signals.forEach { (signalId, measurement) ->
311 // [kotlin_SignalMeasurement_getType]
313 val type = measurement.type
314 println("Signal type: $type")
315 // [kotlin_SignalMeasurement_getType]
317 // [kotlin_SignalMeasurement_getId]
318 // Get signal identifier
319 val id = measurement.id
320 println("Signal ID: $id")
321 // [kotlin_SignalMeasurement_getId]
323 // [kotlin_SignalMeasurement_getRssi]
325 val rssi = measurement.rssi
326 println("Signal RSSI: $rssi dBm")
327 // [kotlin_SignalMeasurement_getRssi]
329 // [kotlin_SignalMeasurement_getDistance]
330 // Get estimated distance
331 val distance = measurement.distance
332 println("Signal distance: $distance meters")
333 // [kotlin_SignalMeasurement_getDistance]
335 // [kotlin_SignalMeasurement_getTime]
336 // Get measurement timestamp
337 val time = measurement.time
338 println("Signal measurement time: $time ms")
339 // [kotlin_SignalMeasurement_getTime]
344 * Demonstrate Vector3d properties
346 private fun demonstrateVector3d(vector: Vector3d) {
347 // [kotlin_Vector3d_getX]
350 println("Vector X: $x")
351 // [kotlin_Vector3d_getX]
353 // [kotlin_Vector3d_getY]
356 println("Vector Y: $y")
357 // [kotlin_Vector3d_getY]
359 // [kotlin_Vector3d_getZ]
362 println("Vector Z: $z")
363 // [kotlin_Vector3d_getZ]
367 * Main demonstration method
369 suspend fun runExample() {
370 println("=== MeasurementManager Example ===")
372 demonstrateMeasurementManagerMethods()
374 // Wait a bit for measurements
377 println("=== Example completed ===")
382 * Function to run the example
384fun main() = runBlocking {
385 val example = MeasurementManagerExample()