为何我编写的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:
这两个是Android系统内置的广播动作,当手机充电状态变化时,系统会自动发送对应的广播。你的接收器通过这个过滤器,就能精准匹配到这些系统广播。<action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
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
相关产品推荐
相关产品推荐

