Как обновить компоненты пользовательского интерфейса от SensoreVentListenerAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как обновить компоненты пользовательского интерфейса от SensoreVentListener

Сообщение Anonymous »

начинающий Android, пожалуйста, не делайте предположений! Это хорошо сработало с регистрацией событий, установленной на отчетность_mode_on_change. Итак, я изменил код, чтобы использовать тревогу. < /P>
Установлена ​​тревога (используя SetExactandAllowwhileIdle) и успешно запускает метод BroadcastReceiver On -ExtoreVive. Один и тот же объект реализует как Broadcasterever, так и SensoreventListener < /p>
Это расположение успешно запускает метод onsensorchanged, когда устройство предоставляет данные. Тем не менее, мне не удалось обновить свой пользовательский интерфейс с помощью данных, несмотря на то, что система, который работал, использовал тот же механизм, который работал перед добавлением тревоги. < /P>
. способ избежать этого. Конечно, я также не знаю, действительно ли это проблемой или нет. Я не собирался помещать код сюда, но я полагаю, это может помочь. Вот это: < /p>
package com.scratch.pressurektv1

import android.app.Activity.SENSOR_SERVICE
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
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.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableDoubleState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import com.scratch.pressurektv1.ui.theme.PressureKTV1Theme
import kotlin.system.exitProcess
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableDoubleStateOf
import androidx.compose.runtime.remember
//import androidx.compose.runtime.livedata.observeAsState // Import the extension function
import androidx.lifecycle.MutableLiveData

//class TimePressureTuple(time: ZonedDateTime, pressure: Double)

class Support {
companion object {
var pressureReading: MutableDoubleState? = null
}
}

class MyReceiver() : BroadcastReceiver(), SensorEventListener {
override fun onReceive(context: Context?, intent: Intent?) {
val sensorManager = context?.getSystemService(SENSOR_SERVICE) as SensorManager
val pressureSensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)

Log.d("alarmManager", "Alarm went off")
Support.pressureReading?.doubleValue = 999.9
sensorManager.registerListener (this,
pressureSensor,
Sensor.REPORTING_MODE_ON_CHANGE)
}

override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
Log.d("alarmManager", "onAccuracyChanged")
}

override fun onSensorChanged(event: SensorEvent?) {
Log.d("alarmManager", "onSensorChanged")
// update UI
val v = event?.values
if (v != null) {
Support.pressureReading?.doubleValue = v[0].toDouble()
}
}
}

class MainActivity : ComponentActivity() {
private val pressureReading = mutableDoubleStateOf(1.0)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val mSensorManager: SensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
val pressureSensor: Sensor? = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)

if (pressureSensor == null) exitProcess(1) // TODO -- helpful message would be good here!
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1_000,
PendingIntent.getBroadcast(this@MainActivity,
1234,
Intent(this, MyReceiver::class.java),
PendingIntent.FLAG_IMMUTABLE))
enableEdgeToEdge()
setContent {
PressureKTV1Theme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting(
pressureReading,
modifier = Modifier.padding(innerPadding)
)
}
}
}
}
}

@Composable
fun Greeting(data: MutableDoubleState, modifier: Modifier = Modifier) {
val value by remember { data }
Text(
text = "Value is " + data.doubleValue,
modifier = modifier
)
}
< /code>
А вот манифест: < /p>




















Подробнее здесь: https://stackoverflow.com/questions/796 ... ntlistener
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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