BroadcastReceiver又名广播接收者。既然它用于接收广播,那一定就有人负责发送。
Android系统中的广播:
在现实生活中,我们都知道广播是什么,用来做什么。例如公园里的广播,主要通知游客什么事情发生了,应该做什么,
不应该做什么。Android系统中的广播跟现实生活中的基本一样,主要用于消息的传递。
广播接收者可在java代码中动态注册,也可以在AndroidManifest文件中注册
有序广播和无序广播
先来说一下无序广播。还是用公园里的广播作为例子,只要广播一发送出去,所有人基本上都同时听到。
它是异步传输的,这就是无序广播。它的特点是传输速度快。但有序广播不能被拦截和被终止。
无序广播使用sendBroadcast方法发送。
有序广播按照一定的顺序发送出去,权限高的接收者先接收到广播信息,该接收者可修改广播中的信息,
然后再将广播向下级传播;也可以终止广播的传播。
BroadcastReceiver类的创建
通过简单的继承BroadcastReceive类并实现onReceive方法就可以创建自己的广播接收者类
private class NormalBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Toast.makeText(getBaseContext(), data, Toast.LENGTH_SHORT).show(); } }
完整代码:
在下面的代码段中,我们通过onResume方法注册广播接收者,在onPause方法中取消广播接收者的注册
当然了,也可以在AndroidManifest文件中注册,这样的广播接收者一旦注册就不能取消。
package com.whathecode.broadcastreceiverdemo; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { //实例化广播接收者 NormalBroadcastReceiver nbr = new NormalBroadcastReceiver(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); //注册广播接收者 registerReceiver(nbr, new IntentFilter("com.whathecode.broadcastreceiverdemo")); } @Override protected void onPause() { super.onPause(); //取消注册广播接收者 unregisterReceiver(nbr); } public void sendOrder(View view) { Intent orderBroadcast = new Intent(); orderBroadcast.setAction("com.whathecode.broadcastreceiverdemo"); orderBroadcast.putExtra("data", "我是有序广播"); //发送有序广播 sendOrderedBroadcast(orderBroadcast, null); } public void sendDisorder(View view) { Intent intent = new Intent(); intent.setAction("com.whathecode.broadcastreceiverdemo"); intent.putExtra("data", "我是无序广播"); //发送无序广播 sendBroadcast(intent); } //继承BroadcastReceiver类,实现onReceive方法 private class NormalBroadcastReceiver extends BroadcastReceiver { /** * 当广播被接收的时候这个方法被调用 */ @Override public void onReceive(Context context, Intent intent) { //获取广播中的信息并用Toast打印出来 String data = intent.getStringExtra("data"); Toast.makeText(getBaseContext(), data, Toast.LENGTH_SHORT).show(); } } }
运行效果: