1.什么是广播
安卓的广播机制就是说,在一些操作完成后,会发送广播,对应的程序会接收到这个广播,并做出相应的处理。
特点:发送方不关心接收方是否接收到数据,也不关心接收方如何处理数据。
三种广播类型:有序广播,无序广播,粘滞广播;
两种广播注册方式:静态广播,动态广播;
发出广播的代码:
建议,每一段接收方都单独建一个app
public class MainActivity extends AppCompatActivity {
private Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt=findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent("zaqqqq");//根据下面每个实例中对应的数据来改变参数
sendBroadcast(intent);//注册无序广播时用
sendOrderedBroadcast(intent,null);//第二参数自定义权限;注册有序广播时用
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
tools:context="com.example.zhang.guangbo.MainActivity">
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="100dp" />
</android.support.constraint.ConstraintLayout>
2.静态注册无序广播示例:
注册静态后,继承BroadcastReceiver类时,要单独建一个内部类,不然无法运行,我反正是这样的,可以自己试一试
<receiver android:name=".bo"> //注册广播
<intent-filter>
<action android:name="zaq" />
</intent-filter>
</receiver>
public class bo extends BroadcastReceiver {//继承BroadcastReceiver类,
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "收到", Toast.LENGTH_SHORT).show();
}
}
3.动态注册无序广播示例:
public class Main2Activity extends AppCompatActivity {
guang as;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
IntentFilter filter=new IntentFilter();
filter.addAction("zaqq");
as=new guang();
registerReceiver(as,filter);//注册打开广播
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(as);//关闭广播
}
class guang extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(Main2Activity.this, "接收", Toast.LENGTH_SHORT).show();
}
}
}
4.静态注册有序广播示例:
<receiver android:name=".qw">
<intent-filter>
<action
android:name="zaqqq"
android:priority="100" />
</intent-filter>
</receiver>
public class qw extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "第一", Toast.LENGTH_SHORT).show();
abortBroadcast();
}
}
5.动态注册有序广播示例:
public class Main3Activity extends AppCompatActivity {
asd a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
a=new asd();
IntentFilter as=new IntentFilter();
as.addAction("zaqqqq");
as.setPriority(1000);//设置优先级
registerReceiver(a,as);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(a);//关闭广播
}
public class asd extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(Main3Activity.this, "第一", Toast.LENGTH_SHORT).show();
}
}
}
优先级范围:-1000~~1000;
同等优先级的情况下,会先接收动态广播,后接受静态广播;
动态广播不是常驻,Activity退出后,会被销毁