Как избежать непрерывных обратных вызовов SensoreVENTERENERAndroid

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

Сообщение Anonymous »

начинающий Android, пожалуйста, не делайте предположений! Реальность будет 10 минут. Проблема (на данном этапе) конкретно заключается в том, что она непрерывно вызывает .
Я удалил свою попытку обновить пользовательский интерфейс из кода. Это все еще терпит неудачу так же, выпустив неограниченные сообщения журнала о onsensorchanged < /li>
Мне сообщили, что мне не нужно использовать «точный» режим времени (но мне нужно, чтобы он работал, когда экран выключен). Я смотрю на то, чтобы изменить это, хотя трудно понять, как это изменит непосредственную проблему, поскольку сигнализация доставляется правильно, как есть. Это хорошо сработало с регистрацией событий, установленной на отчетность_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_ONE_SHOT)
}

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

override fun onSensorChanged(event: SensorEvent?) {
Log.d("alarmManager", "onSensorChanged")
// code attempting to update UI removed
}
}

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 ... -callbacks
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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