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

如何在Android Studio中实现简单的Broadcast Receiver?

嘿,正在练BroadcastReceiver是吧?这可是Android组件里很实用的一块!我看到你贴的Manifest代码里<intent-filter>没写完,结合入门练习的常见场景,我来帮你把整个流程理清楚,从配置到代码实现再到注意事项都给你说清楚~

完整的Manifest配置示例

先把你的Manifest代码补全并格式化,这里以监听屏幕亮灭广播为例(非常适合入门练手):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.maurelio.flipcover">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- 静态注册BroadcastReceiver -->
        <receiver android:name=".SensorReceiver">
            <intent-filter>
                <!-- 监听屏幕点亮系统广播 -->
                <action android:name="android.intent.action.SCREEN_ON" />
                <!-- 监听屏幕熄灭系统广播 -->
                <action android:name="android.intent.action.SCREEN_OFF" />
            </intent-filter>
        </receiver>
    </application>

</manifest>
SensorReceiver核心代码实现

接下来创建SensorReceiver类,继承自BroadcastReceiver,实现核心的onReceive方法来处理广播事件:

public class SensorReceiver extends BroadcastReceiver {
    private static final String TAG = "SensorReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null || intent.getAction() == null) {
            return;
        }

        switch (intent.getAction()) {
            case Intent.ACTION_SCREEN_ON:
                Log.d(TAG, "屏幕点亮啦!");
                // 这里可以加你自己的逻辑,比如弹个提示、触发某个服务
                Toast.makeText(context, "屏幕已点亮", Toast.LENGTH_SHORT).show();
                break;
            case Intent.ACTION_SCREEN_OFF:
                Log.d(TAG, "屏幕熄灭啦!");
                Toast.makeText(context, "屏幕已熄灭", Toast.LENGTH_SHORT).show();
                break;
            default:
                Log.d(TAG, "收到未知广播:" + intent.getAction());
        }
    }
}
必看的关键注意事项
  • Android 8.0+的静态注册限制:从API 26开始,Google收紧了静态注册广播的权限,大部分系统广播(比如上面的屏幕亮灭)都不能用静态注册了,必须改用动态注册。给你贴个动态注册的示例,一般放在Activity里:
private SensorReceiver mReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 初始化接收器并设置监听的广播action
    mReceiver = new SensorReceiver();
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    // 注册接收器
    registerReceiver(mReceiver, filter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    // 一定要在组件销毁时注销接收器,不然会内存泄漏!
    if (mReceiver != null) {
        unregisterReceiver(mReceiver);
    }
}
  • 权限声明:如果监听的是需要权限的广播(比如开机广播BOOT_COMPLETED),得在Manifest里先加权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  • 自定义广播练习:如果是自己发自己收的自定义广播,静态注册是完全没问题的。发送广播的代码如下:
// 发送自定义广播
Intent customIntent = new Intent("org.maurelio.flipcover.CUSTOM_ACTION");
sendBroadcast(customIntent);

对应的Manifest里的intent-filter要加上这个自定义action:

<action android:name="org.maurelio.flipcover.CUSTOM_ACTION" />
测试小技巧
  1. 运行App后,锁屏再亮屏,看Logcat里的SensorReceiver标签日志,或者有没有弹出Toast提示;
  2. 如果用动态注册,要保证Activity没被销毁(比如不要按返回键退出,切到后台就行),要是需要后台持续监听,可以结合Service来实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:31:08