Mir wurde empfohlen, dass ich den "exakten" Timing -Modus nicht verwenden muss (aber ich muss ausgeführt werden, wenn der Bildschirm ausgeschaltet ist). Ich möchte das ändern, obwohl es schwierig ist zu sehen, wie dies das unmittelbare Problem ändern würde, da der Alarm so wie es ist. Dies funktionierte gut mit der Ereignisregistrierung auf Reporting_Mode_on_Change. Daher habe ich den Code so geändert, dass ein Alarm verwendet wird. Das gleiche Objekt implementiert sowohl Rundfunk- als auch SensorEventListener < /p>
Diese Anordnung löst die OnsenSorchanged -Methode erfolgreich aus, wenn das Gerät Daten liefert. Ich habe meine Benutzeroberfläche jedoch nicht mit den Daten aktualisiert, obwohl ich den gleichen Mechanismus verwendet habe, der vor dem Hinzufügen des Alarms verwendet wurde. Finden Sie einen Weg, dies zu vermeiden. Natürlich weiß ich auch nicht, ob dies wirklich das Problem ist oder nicht. Ich würde den Code nicht hier einsetzen, aber ich nehme an, es könnte helfen. Hier ist es: < /p>
Code: Select all
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>
Und hier ist das Manifest: < /p>