获取最大电量需要了解Car模块中android.car.CarInfoManager类,其中getEvBatteryCapacity()方式获取,系统源码如下:
获取当前电量需要了解Car模块中android.car.hardware.property.CarPropertyManager类,
其中getFloatProperty(prop,area)方法,其中prop为VehiclePropertyIds.EV_BATTERY_LEVEL,
area为VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL。这里只介绍电池电量相关,该方法也可获取空调相关数据,有兴趣的同学可以正常使用一下。
系统源码如下:
简单封装了一下,写了个电池管理类CarBatteryManager如下:
import android.car.Car
import android.car.CarInfoManager
import android.car.VehicleAreaType
import android.car.VehiclePropertyIds
import android.car.hardware.property.CarPropertyManager
class CarBatteryManager {
private var carInfoManager: CarInfoManager? = null
private var carPropertyManager: CarPropertyManager? = null
fun init(context: Context) {
val car = Car.createCar(context)
car?.let {
carInfoManager = car.getCarManager(Car.INFO_SERVICE) as CarInfoManager
carPropertyManager = car.getCarManager(Car.PROPERTY_SERVICE) as CarPropertyManager
} ?: kotlin.run {
Log.e(TAG, "car createCar error")
}
}
fun getMaxBatteryCapacity(): Float {
return try {
var evMaxBatteryCapacity = carInfoManager?.evBatteryCapacity
if (evMaxBatteryCapacity == 0F) {
evMaxBatteryCapacity = DEFAULT_MAX_BATTERY_CAPACITY
}
Log.i(TAG, "evMaxBatteryCapacity: $evMaxBatteryCapacity")
evMaxBatteryCapacity ?: DEFAULT_MAX_BATTERY_CAPACITY
} catch (e: Exception) {
Log.e(TAG, "CarInfoManager.evBatteryCapacity throws exception: ${e.message}")
DEFAULT_MAX_BATTERY_CAPACITY
}
}
fun getCurrentBatteryCapacity(): Float {
val currentBatteryCapacity = try {
carPropertyManager?.getFloatProperty(
VehiclePropertyIds.EV_BATTERY_LEVEL,
VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL
)
} catch (e: Exception) {
Log.e(
TAG,
"'VehiclePropertyIds.EV_BATTERY_LEVEL' for area VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL throws exception: "
+ e.message + ". Returning default value - $DEFAULT_CURRENT_BATTERY_CAPACITY."
)
DEFAULT_CURRENT_BATTERY_CAPACITY
}
Log.i(TAG, "currentBatteryCapacity: $currentBatteryCapacity")
currentBatteryCapacity?.let {
if (currentBatteryCapacity <= 0.0f) {
return DEFAULT_CURRENT_BATTERY_CAPACITY
}
return currentBatteryCapacity
} ?: kotlin.run {
return DEFAULT_CURRENT_BATTERY_CAPACITY
}
}
companion object {
private const val TAG = "CarBatteryManager"
//默认最大电量 unit wh
const val DEFAULT_MAX_BATTERY_CAPACITY = 100000.0f
默认当前电量 unit wh
const val DEFAULT_CURRENT_BATTERY_CAPACITY = 100000.0f
@JvmStatic
val instance: CarBatteryManager by lazy { CarBatteryManager() }
}