You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我编写的Android充电状态监听Broadcast Receiver能正常工作?

为什么你的充电状态Broadcast Receiver能正常工作?

嘿,很高兴你的广播接收器顺利运行了!让我给你拆解背后的原因,其实你做对了所有关键步骤:

1. 正确在Manifest中注册接收器

你在AndroidManifest.xml里的注册完全符合要求:

  • android:name=".Starter":明确告诉系统这个广播接收器对应的Java类是哪个,系统能精准找到并实例化它
  • android:enabled="true":确保这个组件处于启用状态,允许系统调用它
  • android:exported="true":允许外部(这里就是Android系统)向这个接收器发送广播(其实对于系统广播来说,即使设为false通常也能接收到,你设true也完全没问题)
  • 最关键的是<intent-filter>里的两个action:
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
    
    这两个是Android系统内置的广播动作,当手机充电状态变化时,系统会自动发送对应的广播。你的接收器通过这个过滤器,就能精准匹配到这些系统广播。

2. 正确实现BroadcastReceiver类

你的Starter类做对了两件核心的事:

  • 继承了BroadcastReceiver基类:这是自定义广播接收器的必要前提,只有继承它,才能被系统识别为广播接收器组件
  • 重写了onReceive()方法:这是广播接收器的核心回调方法,当系统匹配到对应的广播时,就会调用这个方法执行你写的逻辑。你在这里添加的Toast.makeText(),就是状态变化时能弹出提示的直接原因。

对应的代码也完全正确:

public class Starter extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
        Toast.makeText(context,"blablabla",Toast.LENGTH_LONG).show(); 
    } 
}

3. 系统广播的触发机制

当你插拔充电线时,Android系统会实时检测到充电状态的变化,然后自动向所有注册了对应action的广播接收器发送广播。你的接收器因为注册了正确的过滤器,所以能接收到这些广播,进而执行onReceive()里的Toast提示逻辑。

另外补充个小知识点:Android 8.0(API 26)之后,大部分隐式广播都不能通过Manifest注册接收了,但ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED是系统允许保留的例外,所以你的这种注册方式在新版本系统上也能正常工作哦~


内容的提问来源于stack exchange,提问作者justMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:43:38