Частота пульса WearOS считывается, но не меняется на дисплееAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Частота пульса WearOS считывается, но не меняется на дисплее

Сообщение Anonymous »

Я разрабатываю приложение WearOS, которое считывает частоту сердечных сокращений, а затем отображает ее. На часах приложение показывает «Частота пульса: 0» и меняется в зависимости от частоты пульса пользователя. Хотя я настроил его так, чтобы он отображал новые данные о частоте пульса в журнале, чтобы я мог их видеть, но он не обновляет дисплей. На дисплее отображается «Частота пульса: 0», хотя должно быть указано фактическое значение.
Я новичок в использовании Kotlin и Compose, поэтому это довольно запутанно, и я совершенно не понимаю, где я пошли не так. Ниже я прикрепил код и несколько изображений.
Посмотрите отображаемое изображение
Изображение Logcat
Код для MainActivity

Код: Выделить всё

package com.example.myapplication.presentation

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Devices
import androidx.compose.ui.tooling.preview.Preview
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import androidx.wear.compose.material.MaterialTheme
import androidx.wear.compose.material.Text
import kotlinx.coroutines.launch

class 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"
}
}
И заранее спасибо за помощь :)

Подробнее здесь: https://stackoverflow.com/questions/781 ... he-display
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»