Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 12111

WearOS heartrate being read but not changing on the display

$
0
0

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 :)


Viewing all articles
Browse latest Browse all 12111

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>