I am developing a wearos app that reads the heart rate and then displays it. On the watch the app says Heart Rate: 0 and changes based off the user's heart rate. Although I have it set so that it shows the new heart rate data on the log cat so I can see it but it doesn't update the display. The display says "Heart Rate: 0" still when it should say the actual value.
I am fairly new to using kotlin and compose so it's pretty messy and I am fairly confused on where I have gone wrong. Below I have attached the code and some images.Watch Display imageLogcat image
Code for MainActivity
package com.example.myapplication.presentationimport android.Manifestimport android.content.Contextimport android.content.pm.PackageManagerimport android.hardware.Sensorimport android.hardware.SensorEventimport android.hardware.SensorEventListenerimport android.hardware.SensorManagerimport android.os.Bundleimport android.util.Logimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.backgroundimport androidx.compose.foundation.layout.Arrangementimport androidx.compose.foundation.layout.Columnimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.runtime.Composableimport androidx.compose.runtime.LaunchedEffectimport androidx.compose.runtime.getValueimport androidx.compose.runtime.mutableStateOfimport androidx.compose.runtime.rememberimport androidx.compose.runtime.setValueimport androidx.compose.ui.Alignmentimport androidx.compose.ui.Modifierimport androidx.compose.ui.text.style.TextAlignimport androidx.compose.ui.tooling.preview.Devicesimport androidx.compose.ui.tooling.preview.Previewimport androidx.core.app.ActivityCompatimport androidx.core.content.ContextCompatimport androidx.lifecycle.lifecycleScopeimport androidx.wear.compose.material.MaterialThemeimport androidx.wear.compose.material.Textimport kotlinx.coroutines.launchclass MainActivity : ComponentActivity() { private lateinit var sensorManager: SensorManager private var heartRateSensor: Sensor? = null private var heartRateSensorListener: SensorEventListener? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager heartRateSensor = sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE) setContent { HeartRateApp() } } @Preview(device = Devices.WEAR_OS_SMALL_ROUND, showSystemUi = true) @Composable fun HeartRateApp() { var heartRate by remember { mutableStateOf(0) } Column( modifier = Modifier .fillMaxSize() .background(MaterialTheme.colors.background), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = "Heart Rate: $heartRate", textAlign = TextAlign.Center ) LaunchedEffect(key1 = heartRateSensor) { startHeartRateUpdates() } } } private fun startHeartRateUpdates() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.BODY_SENSORS) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.BODY_SENSORS), PERMISSION_REQUEST_BODY_SENSORS ) return } val mutableHeartRate = mutableStateOf(0) heartRateSensorListener = object : SensorEventListener { override fun onSensorChanged(event: SensorEvent?) { event?.let { if (it.sensor.type == Sensor.TYPE_HEART_RATE) { val heartRateValue = it.values[0].toInt() Log.d(TAG, "New Heart Rate Data: $heartRateValue") mutableHeartRate.value = heartRateValue } } } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { // Not needed for heart rate sensor } } sensorManager.registerListener( heartRateSensorListener, heartRateSensor, SensorManager.SENSOR_DELAY_NORMAL ) // Observe changes in mutableHeartRate and update heartRate accordingly lifecycleScope.launch { updateHeartRate(mutableHeartRate.value) } } private fun updateHeartRate(heartRate: Int) { // Update the UI with the latest heart rate value Log.d(TAG, "Heart Rate: $heartRate") } override fun onDestroy() { super.onDestroy() heartRateSensorListener?.let { sensorManager.unregisterListener(it) } } companion object { private const val PERMISSION_REQUEST_BODY_SENSORS = 101 private const val TAG = "HeartRateApp" }}
And thank you sm in advance for helping me :)