-1. 标准广播(Normal broadcasts)
BroadcastReceiver
,并重写 onReceive()
方法,广播到来时该方法执行,处理逻辑写在此处。AndroidManifest.xml
中注册 )。MainActivity
中操作:
IntentFilter
(意图过滤器,指定要监听的广播动作 )和 NetworkChangeReceiver
(自定义广播接收器 )。onCreate()
里初始化 IntentFilter
,添加监听动作(如 android.net.conn.CONNECTIVITY_CHANGE
监听网络变化 ),创建接收器实例并注册(registerReceiver
)。onDestroy()
中取消注册(unregisterReceiver
),避免内存泄漏。NetworkChangeReceiver
类,在 onReceive
中通过 Toast
提示网络变化,演示广播接收后的逻辑处理 。// 导入必要的 Android 相关包
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
// 意图过滤器,用于指定要监听的广播动作
private IntentFilter intentFilter;
// 自定义的网络变化广播接收器
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化意图过滤器
intentFilter = new IntentFilter();
// 添加要监听的广播动作:网络连接变化
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_CHANGE);
// 创建广播接收器实例
networkChangeReceiver = new NetworkChangeReceiver();
// 注册广播接收器,将意图过滤器和接收器关联
registerReceiver(networkChangeReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 当 Activity 销毁时,取消广播接收器的注册,防止内存泄漏
unregisterReceiver(networkChangeReceiver);
}
// 自定义广播接收器类,继承自 BroadcastReceiver
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 当接收到网络变化广播时,弹出 Toast 提示
Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
}
}
}
com.example.broadcasttest
包 → New
→ Other
→ Broadcast Receiver
路径创建,命名 BootCompleteReceiver
并勾选 Exported
(允许接收外部广播 )、Enabled
(启用接收器 )属性。BootCompleteReceiver
的 onReceive
方法中编写逻辑(如示例里通过 Toast
提示开机完成 ),需结合清单文件配置开机广播权限(文档未提及但实际开发需添加 `` ) 。<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcasttest">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
intent-filter>
receiver>
application>
manifest>
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show();
}
}
静态广播注册基础**:静态广播接收器需在 AndroidManifest.xml
的 标签内通过
注册,指定 name
、enabled
、exported
等属性,创建时 Android Studio 可自动完成基础注册。
接收开机广播条件:除基础注册,需添加权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
,并在 内配置 ,通过 声明接收开机完成广播。
代码作用:完成上述配置后,BootCompleteReceiver
才能在设备开机完成时,通过 onReceive
方法触发 Toast
提示,实现监听开机广播功能 。
1.广播接收器创建
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
}
}
2.清单文件(AndroidManifest.xml)配置
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.broadcasttest.MY_BROADCAST"/>
intent-filter>
receiver>
3.布局文件(activity_main.xml)修改
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send Broadcast" />
LinearLayout>
4.Activity 代码(MainActivity.java)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
}
});
}
}
核心逻辑
sendBroadcast()
发送标准广播,所有监听对应 Action 的接收器(如 MyBroadcastReceiver
)会同时收到广播并执行 onReceive
逻辑。关键概念关联
sendBroadcast()
实现。AndroidManifest.xml
中配置,不依赖 Activity 启动即可注册(区别于动态注册发送有序广播(修改 MainActivity
):
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendOrderedBroadcast(intent, null); // 发送有序广播
}
});
设置接收器优先级(修改 BroadcastTest2 清单文件)
<intent-filter android:priority="100">
<action android:name="com.example.broadcasttest.MY_BROADCAST" />
intent-filter>
截断广播(修改 MyBroadcastReceiver
):
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
abortBroadcast(); // 截断广播,阻止后续接收器接收
}
}
有序广播特性
onReceive
。abortBroadcast()
截断广播,控制传递流程。