文章目录

  • 前言
  • 一、导入此类
  • 二、使用步骤
  • 三、获取电量百分比

前言

遇到一个手机电量管理软件开发案例,主界面需要显示当前手机的实时电量。但是我在翻了一些文档之后没有查到监听电量的方法。和广大网友一样退而求其次,选择监听电量状态。


一、导入此类

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;import com.yw.clean.utlis.LogUtils;public class BatteryListener {private Context mContext;private BatteryBroadcastReceiver receiver;private BatteryStateListener mBatteryStateListener;public BatteryListener(Context context) {mContext = context;receiver = new BatteryBroadcastReceiver();}public void register(BatteryStateListener listener) {mBatteryStateListener = listener;if (receiver != null) {IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_BATTERY_CHANGED);filter.addAction(Intent.ACTION_BATTERY_LOW);filter.addAction(Intent.ACTION_BATTERY_OKAY);filter.addAction(Intent.ACTION_POWER_CONNECTED);filter.addAction(Intent.ACTION_POWER_DISCONNECTED);mContext.registerReceiver(receiver, filter);}}public void unregister() {if (receiver != null) {mContext.unregisterReceiver(receiver);}}private class BatteryBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent != null) {String acyion = intent.getAction();switch (acyion) {case Intent.ACTION_BATTERY_CHANGED://电量发生改变if (mBatteryStateListener != null) {LogUtils.e( "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_CHANGED");mBatteryStateListener.onStateChanged();}break;case Intent.ACTION_BATTERY_LOW://电量低if (mBatteryStateListener != null) {LogUtils.e( "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_LOW");mBatteryStateListener.onStateLow();}break;case Intent.ACTION_BATTERY_OKAY://电量充满if (mBatteryStateListener != null) {LogUtils.e("BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_OKAY");mBatteryStateListener.onStateOkay();}break;case Intent.ACTION_POWER_CONNECTED://接通电源if (mBatteryStateListener != null) {LogUtils.e("BatteryBroadcastReceiver --> onReceive--> ACTION_POWER_CONNECTED");mBatteryStateListener.onStatePowerConnected();}break;case Intent.ACTION_POWER_DISCONNECTED://拔出电源if (mBatteryStateListener != null) {LogUtils.e("BatteryBroadcastReceiver --> onReceive--> ACTION_POWER_DISCONNECTED");mBatteryStateListener.onStatePowerDisconnected();}break;}}}}public interface BatteryStateListener {public void onStateChanged();public void onStateLow();public void onStateOkay();public void onStatePowerConnected();public void onStatePowerDisconnected();}}

如果你没有那个LogUtis,删掉相关引用就好,不影响什么。

二、使用步骤

代码如下(示例):

public class MyActivity extends AppCompatActivity {BatteryListener batteryListener;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overrideprotected void onStart() {super.onStart();batteryListener = new BatteryListener(this);batteryListener.register(new BatteryListener.BatteryStateListener() {@Overridepublic void onStateChanged() {}@Overridepublic void onStateLow() {}@Overridepublic void onStateOkay() {}@Overridepublic void onStatePowerConnected() {}@Overridepublic void onStatePowerDisconnected() {}});}@Overrideprotected void onDestroy() {super.onDestroy();batteryListener.unregister();}
}

三、获取电量百分比

1、导入此类

public class BatteryUtils {/*** 主动获取当前电池是否在充电 , 即数据线是否插在手机上* @return*/public static boolean isBatteryCharging(Context context){boolean isBatteryCharging = false;// 主动发送包含是否正在充电状态的广播 , 该广播会持续发送IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);// 注册广播接受者Intent intent = context.registerReceiver(null, intentFilter);// 获取充电状态int batteryChargeState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);// 判定是否是 AC 交流电充电boolean isAc = batteryChargeState == BatteryManager.BATTERY_PLUGGED_AC;// 判断是否是 USB 充电boolean isUsb = batteryChargeState == BatteryManager.BATTERY_PLUGGED_USB;// 判断是否是 无线充电boolean isWireless = batteryChargeState == BatteryManager.BATTERY_PLUGGED_WIRELESS;// 如何上述任意一种为 true , 说明当前正在充电isBatteryCharging = isAc || isUsb || isWireless;return isBatteryCharging;}/*** 获取当前电量百分比* @param context 上下文* @return 电量百分比*/public static float getBatteryPct(Context context){// 主动发送包含是否正在充电状态的广播 , 该广播会持续发送IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);// 注册广播接受者Intent batteryStatus = context.registerReceiver(null, intentFilter);int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);return level * 100 / (float)scale;}}

2、使用

int batteryPct = (int) BatteryUtils.getBatteryPct(this);

Android 电量状态监听(非百分比监听相关推荐

  1. Android 电量变化监听

    Intent.ACTION_BATTERY_CHANGED This is a sticky broadcast containing the charging state, level, and o ...

  2. 【Android 电量优化】JobScheduler 相关源码分析 ( ConnectivityController 底层源码分析 | 构造函数 | 追踪任务更新 | 注册接收者监听连接变化 )

    文章目录 一.ConnectivityController 连接控制器引入 二.ConnectivityController 构造方法解析 ( 注册接收者 ) 三.mConnectivityRecei ...

  3. android 通话状态监听(自定义接听挂断按钮与通话界面,根据公司的业务逻辑可以实现自己的来电秀功能)...

    前言: 因为公司需求,要自定义一款来电秀的app当做周边产品来配合主营的app业务. 之前因为赶项目,没时间整理这块,现在项目告一段落了,现在回头看看感觉这个功能还是挺有意思的,比较有针对性.电话呼入 ...

  4. 用广播监听安卓设备电量状态

      发送通知 这次邮件我们将会讨论怎么获取电量状态在安卓设备上,为了完成这个目标,我们将会使用到广播. What is BroadcastReceiver? A broadcast receiver ...

  5. android 通过GPS获取用户地理位置并监听位置变化

    1 Location Manager 管理服务 2 Location Provider 提供数据的content provider 方式一:GPS 特点:精度高,耗电量大,不耗费流量 权限<us ...

  6. C语言非阻塞监听按键

    使用scanf()和getchar()处理输入文字很合适,它会停止后续代码执行等待用户输入,直到按回车才继续执行,这种缓冲方式称为阻塞式监听,很多时候我们利用在代码末尾添加getchar()来防止程序 ...

  7. oralce 数据库监听日志状态及目录:查看监听(使用grid用户登陆):

    数据库监听日志状态及目录:查看监听(使用grid用户登陆): su - grid 密码:grid [grid@db1 ~]$ lsnrctl LSNRCTL> status LSNRCTL> ...

  8. nginx 监听非标准端口80,重定向端口丢失问题解决

    nginx 监听非标准端口80,重定向端口丢失问题解决 参考文章: (1)nginx 监听非标准端口80,重定向端口丢失问题解决 (2)https://www.cnblogs.com/qianxunm ...

  9. Android Activity 生命周期详解及监听

    前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...

最新文章

  1. Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新
  2. Mybatis-Plus 之 人生中荒废的一下午
  3. 我崩溃了!月薪30K必须掌握的开源项目Java中SPI机制
  4. Socket SSL通讯
  5. C# VS预生成事件命令行 和 生成后事件命令行
  6. sqlite3用python家外键_Django/Sqlite3为带有外键的模型添加一行
  7. 不仅有骁龙8 Plus!摩托罗拉新旗舰还要抢首发2亿像素
  8. openStack常见报错
  9. 易于查阅,幕布记忆思维导图
  10. Paper--3d reconstruction:Photo Tourism: Exploring Photo Collections in 3D
  11. 将本地项目上传到码云
  12. 从开题报告到毕业论文|软件工具大公开
  13. Eighth Week(补充完整)
  14. Pandas数据可视化怎么做?用实战案例告诉你!
  15. 静态分析—扇入、扇出、圈复杂度
  16. ffmpeg 命令学习
  17. 计算机科学与未解决的难题,NP(未解难题)_百度百科
  18. Large Margin Partial Label Machine
  19. 实习之前及实习时的学习计划
  20. 戴尔外星人电脑(双系统win10+ubuntu16.04)安装过程总结

热门文章

  1. 在Mac中将文件压缩为.rar格式的最有效方法
  2. 【机器学习】集成学习(理论)
  3. 小红薯笔记/帖子采集工具
  4. 用Python实现基于人脸识别的门禁管理系统(附源码)
  5. vmware 16 安装 macOS15
  6. ev3pid巡线_【 EV3基础应用 】课题六:PID巡线的P,到底是什么?
  7. mybatis查询为中文时
  8. log4j2日志滚动和定期清理
  9. C# OpenCvSharp 安讯士视频编码器
  10. 三菱变频器计算机链接,三菱变频器的连接PU接口概述