Android电量和插拔电源状态广播监听

Android电量与充电状态监听:BroadcastReceiver与BatteryManager实战解析 在Android系统中,电量与充电状态的变化本质上由系统广播驱动,BroadcastReceiver是处理这类事件的基石。通过动态注册BroadcastReceiver,并结合BatteryManager读取电量百分比、充电状态等关键数据,开发者可以构建实时响应的电池监控功能。这种事件驱动模式不仅避免了轮询带来的功耗浪费,还能精确捕捉充电连接、低电量、离开低电量等系统级事件。典型的应用场景包括省电工具、系统监控App以及电池健康管理。以一个实际Demo为线索,完整演示如何用Kotlin实现电量与充电状态监听 阅读详情

Android电量广播状态有3种,电量低,电量充满,电量发生改变。 
Action是:

Intent.ACTION_BATTERY_CHANGE
Intent.ACTION_BATTERY_LOW
Intent.ACTION_BATTERY_OKAY

Android的插拔电源广播的Action是:

Intent.ACTION_POWER_CONNECTED
Intent.ACTION_POWER_DISCONNECTED

示例代码:

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 {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent != null) {
                String acyion = intent.getAction();
                switch (acyion) {
                    case Intent.ACTION_BATTERY_CHANGED://电量发生改变
                        if (mBatteryStateListener != null) {
                            Log.e("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_CHANGED");
                            mBatteryStateListener.onStateChanged();
                        }
                        break;
                    case Intent.ACTION_BATTERY_LOW://电量低
                        if (mBatteryStateListener != null) {
                            Log.e("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_LOW");
                            mBatteryStateListener.onStateLow();
                        }
                        break;
                    case Intent.ACTION_BATTERY_OKAY://电量充满
                        if (mBatteryStateListener != null) {
                            Log.e("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_OKAY");
                            mBatteryStateListener.onStateOkay();
                        }
                        break;
                    case Intent.ACTION_POWER_CONNECTED://接通电源
                        if (mBatteryStateListener != null) {
                            Log.e("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_POWER_CONNECTED");
                            mBatteryStateListener.onStatePowerConnected();
                        }
                        break;
                    case Intent.ACTION_POWER_DISCONNECTED://拔出电源
                        if (mBatteryStateListener != null) {
                            Log.e("zhang", "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();
    }

}

MainActivity中调用:

public class MainActivity extends AppCompatActivity {

    private BatteryListener listener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listener = new BatteryListener(this);
        listener.register(new BatteryListener.BatteryStateListener() {
            @Override
            public void onStateChanged() {
                Log.e("zhang", "MainActivity --> onStateChanged--> ");
            }

            @Override
            public void onStateLow() {
                Log.e("zhang", "MainActivity --> onStateLow--> ");
                Toast.makeText(MainActivity.this, "onStateLow", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStateOkay() {
                Log.e("zhang", "MainActivity --> onStateOkay--> ");
                Toast.makeText(MainActivity.this, "onStateOkay", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStatePowerConnected() {
                Log.e("zhang", "MainActivity --> onStatePowerConnected--> ");
                Toast.makeText(MainActivity.this, "onStatePowerConnected", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStatePowerDisconnected() {
                Log.e("zhang", "MainActivity --> onStatePowerDisconnected--> ");
                Toast.makeText(MainActivity.this, "onStatePowerDisconnected", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    protected void onDestroy() {
        if (listener != null) {
            listener.unregister();
        }
        super.onDestroy();
    }
}

文章来源:https://blog.youkuaiyun.com/qq_33689414/article/details/53769800

Android充电提示音实现全攻略:广播监听与SoundPool实战 在Android应用开发中,如何实现充电提示音这一看似简单的功能,背后却涉及电源管理、音频播放、系统广播与厂商后台限制等多个关键技术点。理解系统电源状态广播的传递链路,掌握动态注册BroadcastReceiver与SoundPool高效播放短音效的原理,是构建稳定工具类应用的基础。针对Android 8.0后的隐式广播限制及国内厂商ROM的后台策略,开发者需采取动态注册、前台服务保活及去抖逻辑等工程化方案。从插入拔出提示到满电阈值提醒,从静音模式适配到系统音效叠加处理,充电提示音的实现能够帮助开发者深入理 阅读详情

相关推荐

[RK3588-Android12] BQ25703充电IC状态检测与系统电池图标同步优化方案

本文针对RK3588平台Android12系统中,BQ25703充电IC在DC电源插拔时电池图标状态不同步的问题,提供了深度分析与优化方案。通过剖析Linux内核power_supply框架与Android电池服务的工作链条,指出原始中断处理线程的不足,并给出了增强状态同步鲁棒性的驱动层代码优化方案,确保DC电源状态变化能被系统UI实时、准确地响应。

weixin_29168675的博客 496

Android动态获取手机是否是充电状态

Android动态获取手机是否是充电状态

ShiXinXin_Harbour的博客 5916

【Android性能优化】Android电池状态广播节流:BatteryService电量分发链路与限流策略深度解析

电池的电压、电流、温度每秒都在抖动,如果每次抖动都触发一次系统级广播,整个系统将被 BATTERY_CHANGED 洪水淹没。本文基于 Android 16 源码,拆解 BatteryService 的电量分发链路:HAL HealthInfo 上报入口、16 个变化检测基准字段、电压 1%+20 秒、温度 1 度、电流 5 秒的三重节流闸门、三条专项广播通道的投递组折叠策略、LEVEL_CHANGED 的 60 秒队列化批量打包,以及低电关机与垂死取证。

weixin_44081096的博客 153

接收充电状态和电量的系统广播

public class BroadcastR_PowerListener extends BroadcastReceiver { private static final String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED"; private static final Str

WavingBear 2818

安卓15_ROM修改定制化_____深度掌控 Android 电量与充电机制 自定义固定电量值

在 ROM 定制过程中,部分客户要求固定 ROM 中的电量显示。为实现这一需求,需掌握安卓设备电量及充电状态的基本原理,熟悉获取当前系统电量值的指令与实现方式,并了解如何在 ROM 中进行相应修改以满足客户需求。 通过博文了解💝💝💝 1-------💝💝💝安卓设备获取电量值的核心性质与原理 2-------💝💝💝修改模拟虚拟电量值的几种操作方式 3-------💝💝💝在rom定制化过程中的应用与实现

小马哥的专栏 83

RandLA-Net 调通代码1:Windows 11 + Tensorflow 2.4 + S3DIS数据集【踩坑+填坑】

TF不上进啊,学学pytorch

累了就要打游戏 2482

ACTION_POWER_DISCONNECTED广播使用解析

在做项目的时候,要求拔出USB接口要删除指定文件,达到某功能;就想到利用ACTION_POWER_DISCONNECTED广播。 1、 配置文件 AndroidManifest.xml

结合项目案例,记录点点滴滴,自己回顾,分享他人o__o 1万+

基于Python实现的捕鱼达人小游戏源代码+使用说明

摘要: 本文介绍了一款自制的捕鱼达人小游戏,使用Python3和Pygame模块开发。游戏包含完整的资源文件(图片、音效、字体)和源码结构(11个功能模块),实现了大炮移动射击、特殊子弹、炸弹、难度递增等核心玩法。安装需配置Python环境和Pygame模块,运行main.py即可启动游戏。游戏支持键盘控制(方向键移动、空格射击、1键放炸弹),默认时长600秒,包含开始菜单、游戏界面和结束界面。所有代码均有详细注释,项目已开源并提供下载链接。(150字)

2301_76484015的博客 667

android常用广播

//关闭或打开飞行模式时的广播 Intent.ACTION_AIRPLANE_M; //充电状态,或者电池的电量发生变化;//电池的充电状态、电荷级别改变,不能通过组建声; Intent.ACTION_BATTERY_CH; //表示电池电量低 Intent.ACTION_BATTERY_LO; //表示电池电量充足 Intent.ACTION_BATTERY

qq_18944923的博客 996

基于ESP32的智能车载环境监测系统开发

随着智能汽车技术的飞速发展,车载系统的功能越来越多样化,除了基本的行驶控制和娱乐功能外,车载环境监测系统也成为了一项重要的功能。通过实时监测车内环境数据,例如温度、湿度、空气质量、气体浓度等,智能车载环境监测系统能够提供更为舒适和安全的驾驶体验,同时增强车辆的智能化程度,提升用户的整体体验。ESP32作为一种集成了Wi-Fi和蓝牙功能的高效能低功耗嵌入式开发平台,成为了设计车载环境监测系统的理想选择。它不仅具备丰富的接口和处理能力,还能够实现与云平台、手机应用等系统的远程数据传输和控制。

2201_76125393的博客 715

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 492

Android电池状态监听实战:BroadcastReceiver充电与低电量广播详解

在Android应用开发中,实时感知设备电量与充电状态是省电优化、电池健康监测及系统工具类应用的基础能力。实现这一能力的关键在于理解系统广播机制:通过BroadcastReceiver配合IntentFilter动态注册,被动接收充电状态切换与电量等级变化,相比轮询方案更省资源且实时性更高。同时,Android 8.0+对静态隐式广播的限制,使得动态注册成为兼容所有版本的推荐方案。粘性广播ACTION_BATTERY_CHANGED可快速获取当前电量快照,而ACTION_BATTERY_LOW与ACTION

weixin_33976072的博客 296

PHP实现SM2算法(附完整源码)

PHP实现SM2算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4025

从React渲染页面中提取文件数据:威软夸克助手React Fiber树遍历实战解析

威软夸克助手是一款运行在夸克网盘(pan.quark.cn)上的油猴脚本,能勾选文件后一键解析真实下载直链,支持批量导出 aria2 / cURL 命令。它最核心的技术难点,是如何从 React 渲染的页面中"取出"文件的真实数据(如文件 ID)。这篇文章将带你完整拆解它的 **React Fiber 树遍历**实战方案,即使你是前端新手,也能看懂其中每一步的设计思路。 ## 🤔 为什么直接读

gitblog_00108的博客 379

Python 爬虫实战:淘宝直播间实时数据抓取(弹幕分析 + 流量监控)

随着电商直播的迅猛发展,淘宝直播已成为品牌推广和商品销售的重要阵地。通过爬取淘宝直播间的实时数据,包括弹幕互动和流量信息,可以帮助商家深入了解用户行为、优化直播策略,同时为市场分析和商业决策提供数据支持。本文将深入探讨如何利用 Python 爬虫技术实现对淘宝直播间实时数据的抓取,并进行弹幕分析和流量监控。

u014481728的博客 730

logisim中,如何设计一个位于十字路口的交通信号灯控制系统?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1347

安卓监听手机插拔状态

直接上代码${intentaction。

AdrianAndroid的专栏 238

华为OD机试新系统真题【字符串压缩编码】

华为OD机试 新系统真题【字符串压缩编码】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串压缩编码】多语言题解

qq_45776114的博客 353

Android电量监测:BroadcastReceiver广播机制与adb模拟实战

在Android系统开发中,广播(Broadcast)机制是组件间及系统与应用间通信的核心方式。通过注册BroadcastReceiver,开发者可以监听充电器连接、电量变化等系统级事件。系统由BatteryService维护电池状态,并通过粘性广播等方式通知应用,其中ACTION_BATTERY_LOW注册时可能立即收到历史事件,需要结合业务场景处理。利用BatteryManager可获取实时电量百分比,实现自定义阈值判断,该技术广泛应用于设备诊断、电源管理、低电量提醒等场景。针对开发与验证,可通过adb

weixin_34174422的博客 256

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

app android设置只充电,2020-07-29 android app 监控充电状态

监控电池电量和充电状态如果您要通过改变后台更新的频率降低这些更新对电池续航时间的影响,最好先从检查当前电池电量和充电状态入手。执行应用更新对电池续航时间的影响取决于设备的电池电量和充电状态。设备通过交流电源充电时执行更新的影响可以忽略不计,因此在大多数情况下,只要设备连接到壁式充电器,您就可以最大限度地提高更新频率。相反,如果设备正在放电,降低更新频率有助于延长电池续航时间。同理,您也可以检查电池...

weixin_36134015的博客 437

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android 获取手机充电状态

通过注册广播private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.d

wangjicong_215的博客 5116

充电提示音实战:Android广播监听、音频播放与全版本适配指南

在Android应用开发中,系统事件监听与即时音频反馈是工具类应用的高频需求,而实现这类能力的根基在于广播接收器与前台服务的有效配合。充电状态变化依赖动态注册的广播接收器捕获,但Android 8.0后静态注册受限,必须借助前台服务保持进程存活,才能保证锁屏或后台场景下事件触发后仍有播放能力。提示音播放需在MediaPlayer、SoundPool、Ringtone中合理选型,并通过音频焦点机制规避与音乐、通知的冲突。此外,Doze模式下的广播延迟、充电接口抖动、厂商ROM激进后台清理、通知权限适配等问题,

weixin_29169505的博客 308

Android 电池管理(BatteryService) 详解

SystemServer在启动BatteryService时,一次会调用它的构造函数,onStart,onBootPhase方法;解析来我们分析一下这些方法: 1.Constructor方法: public BatteryService(Context context) { super(context); mContext = context; mHandler = new Handler(true /*async*/); //电源呼吸灯 mLed = new Led

weixin_42754390的博客 8168

Android电源管理模块架构设计:从数据采集到省电策略落地

Android系统本身具备BatteryManager、Doze等电源管理能力,但面对业务侧的精细化需求,应用层往往需要自行构建一套完整的电源管理方案。从电池状态监听到耗电排行,再到低电量下的自动策略响应,整个过程涉及数据采集、规则匹配与任务执行等多个环节。理解充电状态切换、屏幕与网络状态的影响,是设计省电策略的基础。通过观察者模式与策略模式解耦事件源和业务逻辑,借助分层架构实现数据层、策略引擎与UI的独立演进,能够大幅提升模块的可复用性与可测试性。这套思路不仅适用于工具类或系统优化类App,也可延伸到物联

weixin_29204205的博客 257

[Android 小应用]batterymonitor 电源监控

电源监控

xsjyahoo的专栏 1403
上一篇: android端实现断点续传下载---改进版
下一篇: Android终止线程的方法
augfun
博客等级 码龄10年 311粉丝 662原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值