一、什么是广播
01、广播是Android四大组件之一,全称BroadcastReceiver
02、广播分为发送方和接收方,就算没有接收方,发送方也会发送数据
03、广播可以实现跨多个页面的数据通信
04、广播可以实现跨进程之间的数据通信
二、广播的分类
1、无序广播
2、有序广播
3、粘滞广播
三、静态注册发送无序广播的步骤
01、新建类继承BroadcastReceiver
02、实现onReceive抽象方法
03、在AndroidManifest中注册BroadcastReceiver
04、在有Context坏境中通过sendbroadcast发送广播
静态注册发送无序广播代码展示
step1:在布局中写入一个按钮,并定义控件、绑定ID、设置监听事件
step2:设置发送频道,发送广播
step3:在AndroidManifest中注册
//发送方
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.main_btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//发送广播,引号中的是频道号
Intent intent = new Intent("zhifubao");
sendBroadcast(intent);
}
});
}
}
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"笑啥啊啊啊啊啊",Toast.LENGTH_SHORT).show();
}
}
//静态注册(无序广播)在AndroidManifest中注册的代码
<receiver android:name=".MyReceiver">
<intent-filter
<action android:name="zhifubao"/>
</intent-filter>
</receiver>
四、动态注册发送无序广播的步骤
- 新建类继承BroadcastReceiver
- 实现onReceive抽象方法
- 在代码中实例化广播类
- 在代码中实例化IntentFilter
- 调用IntentFilter对象的addAction方法设置频道号
- 在有Context坏境中调用registerReceiver注册广播
- 在有Context坏境中通过sendBroadcast发送广播
在有Context坏境中调用unregisterReceiver注销广播
动态注册发送无序广播代码展示:
发送方代码同上
//接收方代码
public class MainActivity extends AppCompatActivity {
private MyReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver=new MyReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("zhifubao");
//动态注册(无序)广播接收器
registerReceiver(myReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}
五、静态注册发送有序广播的步骤
01、新建类继承BroadcastReceiver
02、实现onReceive抽象方法
03、在AndroidManifest中注册BroadcastReceiver
04、在有Context坏境中通过sendOrderedbroadcast发送广播
静态注册发送有序广播代码展示:
//发送方代码
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.main_btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//发送广播,引号中的是频道号
Intent intent = new Intent("zhifubao");
sendOrderedBroadcast(intent, null);//安卓中自定义权限
}
});
}
}
//静态注册(有序广播)
<receiver android:name=".MyReceiver1">
<intent-filter android:priority="100">
<action android:name="zhifubao" />
</intent-filter>
</receiver>
<receiver android:name=".MyReceiver2">
<intent-filter android:priority="1000">
<action android:name="zhifubao" />
</intent-filter>
</receiver>
六、动态注册发送有序广播的步骤
- 新建类继承BroadcastReceiver
- 实现onReceive抽象方法
- 在代码中实例化广播类
- 在代码中实例化IntentFilter
- 调用IntentFilter对象的addAction方法设置频道号
- 调用IntentFilter对象的priority方法设置优先级
- 在有Context坏境中调用registerReceiver注册广播
- 在有Context坏境中通过sendBroadcast发送广播
- 在有Context坏境中调用unregisterReceiver注销广播
动态注册发送有序广播代码展示
发送方代码同上
接收方Activity代码如下:
public class MainActivity extends AppCompatActivity {
private MyReceiver1 receiver1;
private MyReceiver2 receiver2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//动态注册有序广播
receiver1 = new MyReceiver1();
IntentFilter intentFilter1 = new IntentFilter();
intentFilter1.addAction("zhifubao");
intentFilter1.setPriority(100);
registerReceiver(receiver1, intentFilter1);
receiver2 = new MyReceiver2();
IntentFilter intentFilter2 = new IntentFilter();
intentFilter2.addAction("zhifubao");
intentFilter1.setPriority(1000);
registerReceiver(receiver2, intentFilter2);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver1);
unregisterReceiver(receiver2);
}
}