1.什么是广播
广播是Android的四大组件之一,全程是BoradcastReceiver,广播的分类分为发送和接受方,就算没有接收方,发送方也会发送数据。
广播可以实现跨多个页面数据传输,也可以实现跨进程间的数据通信。
对于什么是广播我们生面有许多的例子就比如,手机中的来电,短信电量,开机等各种操作。看看自己以为广播离自己很远但是只要你仔细观察一下就会与发现身边到处都是。
关于广播的分类我们可以分为三种:
无序广播:不管有多少接受者,一旦发出无序广播,所有监听此广播的的接受者都能接收到。
有序广播:按照接受者的优先级,逐一传递,优先级最高的接受者先接受,如果不终止此广播,再往下传递。
粘滞广播:当广播发出后,如果系统没有接受者,会一直等待,直到有接受者接受消息为止。
2.静态注册无序广播示例
我们要新建继承类BroadcastRecevier
实现onReceive抽象方法
在AndroidManifest中注册BroadcastRecevier
<receiver
android:name=".MyRecvice">
<intent-filter >
<action android:name="zhifubao" />
</intent-filter>
</receiver>
之后再Context环境中通过sendReceive发送广播
代码如下
public class MyRecvice extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "你好", Toast.LENGTH_SHORT).show();
Log.e("Recevice","---------------");
// abortBroadcast();
}
}
这是接受页面的代码然后下面就是发送广播的代码
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.butn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "asdf", Toast.LENGTH_SHORT).show();
//发送广播
Intent intent = new Intent("zhifubao");
sendBroadcast(intent,null);
}
});
}
}
3.动态注册无序广播示例
动态就是在AndroidMainifest中注册的弄到代码中实现
代码如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myRecvice = new MyRecvice();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("zhifubao");
registerReceiver(myRecvice,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myRecvice);
}
}
4.静态注册有序广播示例
在AndroidMainifes中添加priority属性至于之后的优先级就是你去的数字决定的在-1000到1000之间对于其他的代码其实是一样的没有什么的区别
priority属性:在注册时,设置的广播的优先级级别,此属性是一个int型
sendOrderedBroadcast方法:发送一个有序广播,优先级最高的广播优先接受。
setResultExtras方法:此方法在onReceive内部使用,代表继续往下一级传递有序广播
abortBroadcast方法:此方法在onReceive内部使用,如果不想继续传递,使用此方法结束广播
5.动态注册有序广播示例
在前面的无序动态广播就是加一句intentFilter.setPriority(1000);就可以实现,
sendOrderedBroadcast发送广播。