注意:所有的组件都需要注册
广播(BroadcastReceiver)Android中的四大组件之一,是Android系统以及应用程序传递信号的一种机制。它灵活的穿梭在各个应用程序之间或者是单个应用程序的内部,一旦发现满足条件的接收者,就会去这个接收者中进行广播
使用场景
静态注册(清单声明的接收器)动态注册(上下文注册的接收器)public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"静态广播------",Toast.LENGTH_SHORT).show();
}
}
<receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="com.example.demoh.MyBroadcastReceiver"/>
</intent-filter>
</receiver>
Enabled属性的作用是是否启动这个广播接受器。
Exported属性的作用是是否允许这个广播接收器接受本程序以外的广播
android:name =" 里面的名字可随意(最好是统一包名+类名)"

写一个发送广播的点击事件
activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击发送静态广播" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击发送动态广播" />
</LinearLayout>
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 view) {
Intent intent=new Intent();
intent.setAction("com.example.demoh.MyBroadcastReceiver");
//安卓8.0以上,加上下面这一句,第一个参数是目标广播接收器所在应用的包名,第二个参数是目标广播接收器类全路径
intent.setComponent(new ComponentName(getPackageName(),getPackageName()+".MyBroadcastReceiver"));
sendBroadcast(intent);
}
});
}
}
intent.setComponent(new ComponentName(getPackageName(),getPackageName()+".MyBroadcastReceiver"));
//intent.setComponent(new ComponentName(包名,包名+".MyBroadcastReceiver"));
public class MyBroadcastReceiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"动态广播------",Toast.LENGTH_SHORT).show();
}
}
<receiver android:name=".MyBroadcastReceiver2"/>
public class MainActivity extends AppCompatActivity {
private MyBroadcastReceiver2 receiver2=new MyBroadcastReceiver2();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button);
Button button2=findViewById(R.id.button2);
//静态注册点击事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.setAction("com.example.demoh.MyBroadcastReceiver");
intent.setComponent(new ComponentName(getPackageName(),getPackageName()+".MyBroadcastReceiver"));
sendBroadcast(intent);
}
});
//动态注册点击事件
IntentFilter filter=new IntentFilter();
filter.addAction("com.example.demoh.MyBroadcastReceiver2");
registerReceiver(receiver2,filter);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.setAction("com.example.demoh.MyBroadcastReceiver2");
intent.setComponent(new ComponentName(getPackageName(),getPackageName()+".MyBroadcastReceiver2"));
sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver2);
}
}
别忘了在onDestroy()中 销毁广播