Android 电量状态监听(非百分比监听
文章目录
- 前言
- 一、导入此类
- 二、使用步骤
- 三、获取电量百分比
前言
遇到一个手机电量管理软件开发案例,主界面需要显示当前手机的实时电量。但是我在翻了一些文档之后没有查到监听电量的方法。和广大网友一样退而求其次,选择监听电量状态。
一、导入此类
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 电量状态监听(非百分比监听相关推荐
- Android 电量变化监听
Intent.ACTION_BATTERY_CHANGED This is a sticky broadcast containing the charging state, level, and o ...
- 【Android 电量优化】JobScheduler 相关源码分析 ( ConnectivityController 底层源码分析 | 构造函数 | 追踪任务更新 | 注册接收者监听连接变化 )
文章目录 一.ConnectivityController 连接控制器引入 二.ConnectivityController 构造方法解析 ( 注册接收者 ) 三.mConnectivityRecei ...
- android 通话状态监听(自定义接听挂断按钮与通话界面,根据公司的业务逻辑可以实现自己的来电秀功能)...
前言: 因为公司需求,要自定义一款来电秀的app当做周边产品来配合主营的app业务. 之前因为赶项目,没时间整理这块,现在项目告一段落了,现在回头看看感觉这个功能还是挺有意思的,比较有针对性.电话呼入 ...
- 用广播监听安卓设备电量状态
发送通知 这次邮件我们将会讨论怎么获取电量状态在安卓设备上,为了完成这个目标,我们将会使用到广播. What is BroadcastReceiver? A broadcast receiver ...
- android 通过GPS获取用户地理位置并监听位置变化
1 Location Manager 管理服务 2 Location Provider 提供数据的content provider 方式一:GPS 特点:精度高,耗电量大,不耗费流量 权限<us ...
- C语言非阻塞监听按键
使用scanf()和getchar()处理输入文字很合适,它会停止后续代码执行等待用户输入,直到按回车才继续执行,这种缓冲方式称为阻塞式监听,很多时候我们利用在代码末尾添加getchar()来防止程序 ...
- oralce 数据库监听日志状态及目录:查看监听(使用grid用户登陆):
数据库监听日志状态及目录:查看监听(使用grid用户登陆): su - grid 密码:grid [grid@db1 ~]$ lsnrctl LSNRCTL> status LSNRCTL> ...
- nginx 监听非标准端口80,重定向端口丢失问题解决
nginx 监听非标准端口80,重定向端口丢失问题解决 参考文章: (1)nginx 监听非标准端口80,重定向端口丢失问题解决 (2)https://www.cnblogs.com/qianxunm ...
- Android Activity 生命周期详解及监听
前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...
最新文章
- Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新
- Mybatis-Plus 之 人生中荒废的一下午
- 我崩溃了!月薪30K必须掌握的开源项目Java中SPI机制
- Socket SSL通讯
- C# VS预生成事件命令行 和 生成后事件命令行
- sqlite3用python家外键_Django/Sqlite3为带有外键的模型添加一行
- 不仅有骁龙8 Plus!摩托罗拉新旗舰还要抢首发2亿像素
- openStack常见报错
- 易于查阅,幕布记忆思维导图
- Paper--3d reconstruction:Photo Tourism: Exploring Photo Collections in 3D
- 将本地项目上传到码云
- 从开题报告到毕业论文|软件工具大公开
- Eighth Week(补充完整)
- Pandas数据可视化怎么做?用实战案例告诉你!
- 静态分析—扇入、扇出、圈复杂度
- ffmpeg 命令学习
- 计算机科学与未解决的难题,NP(未解难题)_百度百科
- Large Margin Partial Label Machine
- 实习之前及实习时的学习计划
- 戴尔外星人电脑(双系统win10+ubuntu16.04)安装过程总结