Recientemente he modificado parte del código de la app, el cambio efectuado es que los valores que se obtiene de la batería se almacenen en un objeto con su propiedades parseadas
Objeto BatteryInfo.kt
import android.os.BatteryManager
class BatteryInfo {
var level: Float? = null
var status: Int? = null
var chargePlug: Int? = null
var health: Int? = null
var voltage: Float = 0.0F
get() {
return if (field > 1000) {
field / 1000f
} else {
field
}
}
var temperature: Int = 0
var technology: String? = "unknown"
val isPlugged: Boolean
get() {
return chargePlug == BatteryManager.BATTERY_PLUGGED_USB
|| status == BatteryManager.BATTERY_PLUGGED_AC
|| status == BatteryManager.BATTERY_PLUGGED_WIRELESS
}
override fun toString(): String {
return "BatteryInfo(level=$level, status=$status, chargePlug=$chargePlug, health=$health, batteryVoltage=$voltage, batteryTemperature=$temperature, batteryTechnology='$technology')"
}
}
Al obtener los datos de la batería, se deben añadir al objeto de tipo BatteryInfo
val level: Int = intent!!.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
val batteryPct: Float = level / scale.toFloat()
val batteryInfo: BatteryInfo = BatteryInfo()
batteryInfo.status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)
batteryInfo.level = batteryPct
batteryInfo.chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
batteryInfo.health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN)
batteryInfo.voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1).toFloat()
batteryInfo.temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1)
batteryInfo.technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY)
Log.d(TAG, "batteryInfo $batteryInfo")