Android-实车获取电池最大电量和当前电量

        获取最大电量需要了解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() }
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值