Page 1 of 1

Wie kann ich den Wert aktualisieren, den ich mit Jetpack Compose zeichne?

Posted: 27 Feb 2025, 01:29
by Anonymous
Ich versuche eine Android -App zu machen, die den Batterieprozentsatz erhält und anzeigt, aber ich kann es nicht zum Aktualisieren bringen. Meine vielen Versuche, diesen Wert zu aktualisieren. Ich bin mir nicht einmal sicher, ob UpdateBatteryPCT sogar funktioniert. Ich würde mich freuen, wenn mir jemand eingehend erklären könnte, wie dies funktioniert, weil ich nicht wirklich alles untersuche. Ich kann in Kotlin codieren und Sachen machen, aber ich kann nichts tun, was für Android funktioniert. < /P>

Code: Select all

class MainActivity : ComponentActivity() {
var batteryStatus: Intent? = null
var batteryPct: MutableState = mutableStateOf(0)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(/* savedInstanceState = */ savedInstanceState)
setContent {
this.batteryStatus = getBatteryStatusReceiver()
this.batteryPct = remember {
mutableStateOf(0)
}
BatterySaverAppTheme {
// A surface container using the 'background' color from the theme
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) {
getBatteryPct(this.batteryStatus, this.batteryPct)
DisplayBatteryPercentage(batteryPercentage = this.batteryPct)
}
}
}
}
suspend fun updateBatteryPct () {
while (true) {
getBatteryPct(this.batteryStatus, this.batteryPct)
delay(1000)
Log.d("customTest", "updateBatteryPct: Looping")
}
}
}

class BatteryManagerBroadcastReceiver(
private val onReceiveIntent: (Intent) -> Unit,
) : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
onReceiveIntent(intent)
}
}
@Composable
fun updateBatteryPct(batteryStatus: Intent?, batteryPct: MutableState) {
while (true) {
getBatteryPct(batteryStatus, batteryPct)
DisplayBatteryPercentage(batteryPercentage = batteryPct)
}
}

fun getBatteryPct(batteryStatus: Intent?, batteryPct: MutableState){
batteryPct.value =  batteryStatus?.let { intent ->
val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
level * 100 / scale
}!!
}

@Composable
fun getBatteryStatusReceiver(): Intent? {
val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
LocalContext.current.applicationContext.registerReceiver(null, ifilter)
}
return batteryStatus
}

@Composable
fun DisplayBatteryPercentage(batteryPercentage: MutableState) {
Column(Modifier.padding(16.dp)) {
Text("battery is at ${batteryPercentage.value}%") }
}