1.获取电池信息

通过电池状态改变广播

private BroadcastReceiver mBatInfoReceiver=new BroadcastReceiver(){public void onReceive(Context context, Intent intent) {String action = intent.getAction();if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {BatteryInfoEvent batteryInfoEvent=new BatteryInfoEvent();//当前电量int intLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);int intScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);batteryInfoEvent.setBatteryPercent(intLevel * 100 / intScale);//电池温度int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);float batteryTemperature = temperature / 10;batteryInfoEvent.setBatteryTemperature(batteryTemperature);//充电状态int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,-1);String desc="";switch (status){// 正充电case BatteryManager.BATTERY_STATUS_CHARGING:desc="正在充电";break;// 已经充满case BatteryManager.BATTERY_STATUS_FULL:desc="已充满";break;// 正断开充电case BatteryManager.BATTERY_STATUS_DISCHARGING:desc="未充电";break;// 没有充电case BatteryManager.BATTERY_STATUS_NOT_CHARGING:desc="未充电";break;// 未知状态case BatteryManager.BATTERY_STATUS_UNKNOWN:desc="未知状态";break;case -1:{desc="获取充电状态失败";}break;}batteryInfoEvent.setChargeStatus(status);//电池电压int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);float batteryVoltage = voltage / 1000f;BigDecimal bd = new BigDecimal(batteryVoltage);double value = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();//保留两位小数batteryInfoEvent.setBatteryVoltage(value);//电池健康状态int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, -1);String batteryHealth = null;switch(health){case BatteryManager.BATTERY_HEALTH_DEAD: batteryHealth = "没电";break;case BatteryManager.BATTERY_HEALTH_GOOD: batteryHealth = "健康";break;case BatteryManager.BATTERY_HEALTH_OVERHEAT: batteryHealth = "过热";break;case BatteryManager.BATTERY_HEALTH_COLD: batteryHealth = "过冷";break;case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: batteryHealth = "过电压";break;case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: batteryHealth = "未知错误";break;case BatteryManager.BATTERY_HEALTH_UNKNOWN: batteryHealth = "未知";break;}batteryInfoEvent.setHealthStatus(health);batteryInfoEvent.setHealthStatusDesc(batteryHealth);//电池类型String technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);batteryInfoEvent.setTechnology(technology);//连接电源类型int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);String pluggedDesc="";switch (plugged){case BatteryManager.BATTERY_PLUGGED_AC:{pluggedDesc="充电器";}break;case BatteryManager.BATTERY_PLUGGED_USB:{pluggedDesc="USB";}break;case BatteryManager.BATTERY_PLUGGED_WIRELESS:{pluggedDesc="无线充电";}break;default:{pluggedDesc="未充电";}}batteryInfoEvent.setPlugged(plugged);batteryInfoEvent.setPluggedDesc(pluggedDesc);}}};

记得广播的注册与注销

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);registerReceiver(mBatInfoReceiver,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));//注册电池信息变化广播}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(mBatInfoReceiver);//注销电池信息变化广播}

这样可以拿到系统能提供的电池相关的信息

电池充电状态以及电池瞬时电流之类的也可以通过BatteryManager来获取

BatteryManager batteryManager = (BatteryManager) context.getSystemService(android.content.Context.BATTERY_SERVICE);// 剩余电量百分比 BATTERY_PROPERTY_CAPACITY: 51int batteryCapacity =batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);// 当前电池剩余容量(mAH) BATTERY_PROPERTY_CHARGE_COUNTER: 2192080int batteryChargeCounter =batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);// 剩余能量(nWH) BATTERY_PROPERTY_ENERGY_COUNTER: -2147483648long batteryEnergyCounter =batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);// 瞬时电流(mA)  BATTERY_PROPERTY_CURRENT_NOW: 632324(负表示放电 正表示充电)int batteryCurrentNow =batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW);// 平均电流(mA)  BATTERY_PROPERTY_CURRENT_AVERAGE: -2147483648 (负表示放电 正表示充电)int batteryCurrentAverage =batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);// 状态(获取电池充电状态需要api>=26)小于26的将获取不到int status =batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_STATUS);

2.电池电量剩余使用时间

这个在网上没有现成的实现方案,像目前市场上的应用 电池医生等等 计算电池剩余使用时间 电池充电充满时间 电池健康度(根据电池容量的损耗来计算) 很多都是假数据。许多厂商会有相应的显示,但是哪些数据是不开放给开发者的,都是系统级别的权限,常规的开发者根本无法获取到。所以,要相对比较准确的计算以上数据,其实是需要应用对电池进行长时间的监测,根据电池使用状态较稳定(即:假设我们要计算电池剩余使用时间,则手机处于一个稳定的使用状态(放电状态稳定)情况下,根据电池每下降1%所用的时间来反推电池剩余电量的使用时间),充电剩余时间同理。

获取手机电池信息及电池剩余使用时间问题说明相关推荐

  1. android电池剩余使用时间,android电池剩余使用时间

    其实并不太想写这边文章.因为算出的数据不是太高准确,但是可能有人有需求,就写上一些求全的办法吧.在此要说上一句,目前并没有能十分准确的算出电池时间(比如说金山和腾讯的电池管家,经过反编等手段,证实用的 ...

  2. android 静态注册获取电量,获取手机电池百分比和电池容量方法

    在智能手机的开发过程中,经常需要获取手机的电池信息.其实获取的方法很多,下面介绍下方法. 一:首先介绍获取电池容量.例如java反射方式获取.代码如下 package com.example.jame ...

  3. 获取手机电池百分比和电池容量方法

    在智能手机的开发过程中,经常需要获取手机的电池信息.其实获取的方法很多,下面介绍下方法. 一:首先介绍获取电池容量.例如java反射方式获取.代码如下 package com.example.jame ...

  4. Android之获取手机基本信息、内存信息、网路信息、电池信息,等一共18项数据

    获取手机信息,代码复制可用,开发工具为:Android Studio 1.手机品牌 2.手机型号 3.屏幕分辨率 4.像素密度 5.屏幕尺寸 6.Android 系统版本 7.运行内存 8.储存空间 ...

  5. 安卓手机电池信息的获取与显示

    我们在开发某些安卓应用时需要获取电池的一些状态信息如:电量.电压.温度等,虽然在安卓操作系统中已有查看电池信息的功能,但需要手动打开查看,无法在我们想要的界面上显示,本文所要讲的就是如何让电池信息动态 ...

  6. delphi获得笔记本的电池状态(剩余百分比,状体,剩余事件,电池总使用时间)

    var lpsps: SYSTEM_POWER_STATUS; beginGetSystemPowerStatus(lpsps);case lpsps.ACLineStatus of0: Memo2. ...

  7. HTML5标准有缺陷 手机电池信息可泄露上网活动

    智能手机电池信息 北京时间8月3日消息,据科技网站DigitalTrends报道,由于HTML5标准的兴起,手机电池可能向网站泄露用户的上网活动.相关功能最初的目的,是在手机电量低时使网站能向用户提供 ...

  8. C# 获取笔记本电池信息 调用 Win32 Api

    C# 获取笔记本电池信息 获取电池信息需要调用Win32 Api 相关函数为 GetSystemPowerStatus 函数结构: BOOL GetSystemPowerStatus(LPSYSTEM ...

  9. 安卓项目查手机电量功能_Android获取手机电池电量用法实例

    本文实例讲述了Android获取手机电池电量用法.分享给大家供大家参考.具体如下: 原理概述: 手机电池电量的获取在应用程序的开发中也很常用,Android系统中手机电池电量发生变化的消息是通过Int ...

最新文章

  1. 《iBATIS 实战》——国内第一本iBATIS巨著(iBATIS之父撰写)
  2. Android:学习笔记(一)
  3. 浏览器中的机器学习:使用预训练模型
  4. Windows server 2003 CA配置(一)
  5. 4.openstack之mitaka搭建glance镜像服务
  6. lucene 索引中文档的属性建立与不建立带来的影响总结
  7. VS2013 community卸载后不能重装的问题
  8. JAVA高级工程师知识树
  9. 两个月攻克系统集成项目管理工程师
  10. 造数神器mocker带你10分钟完成千万级别数据量的造数能力-高级用法篇
  11. 性能测试工程师职业现状分析
  12. android 记录触屏坐标,android触摸屏坐标手工校准/调整成功
  13. 系统集成项目管理工程师学习
  14. 操作系统接口shell
  15. 四足机器人的六种步态特征
  16. java IO流之一 IO流介绍
  17. 拼多多商家想做好推广一定不能这么做!
  18. 读书笔记--高效能人士的七个习惯+执行4原则
  19. CString和LPVOID的转换(线程参数传递) .
  20. SIM7020X NB-IOT HAT 通过MQTT连接EMQ物联网平台

热门文章

  1. HTML5之前端工具
  2. Windows 7 无法登陆网银
  3. 极多数据的输出前k(k10)大值——swust oj福布斯排行榜(0273)
  4. 【C++】STL --- 概论和三大组件
  5. DTL with变量
  6. 山地车和公路车怎么选
  7. JOSN 和 Js 对象
  8. CSS pre中josn超出宽度自动换行
  9. canvas时钟模拟器 - Kaiqisan
  10. pdf文档如何修改乱序页面