一.经过总结学习广播机制的内容得出,创建一个广播共需要3个步骤:
1.注册一个广播:
registerReceiver(broadCast, intentFilter);
2.发送一个广播:
sendBroadcast(intent);
3.注销广播:
unregisterReceiver(broadCast);
注意,一般注销广播,需要在onDestroy()方法中执行
二.下面通过一个简单的实例来进一步的了解android的广播机制:
1.MainActivity.java
public class MainActivity extends Activity implements OnClickListener {
private Button btn_recevierone;
private Button btn_receivertwo;
private Button btn_receiverthree;
private BroadCast broadCast;// 自定义广播
private LinearLayout container;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
init();
// 注册广播
broadCast = new BroadCast(container);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcastone");
intentFilter.addAction("com.example.broadcasttwo");
intentFilter.addAction("com.example.broadcastthree");
registerReceiver(broadCast, intentFilter);
}
private void init() {
// TODO Auto-generated method stub
btn_recevierone = (Button) findViewById(R.id.btn_recevierone);
btn_receivertwo = (Button) findViewById(R.id.btn_receviertwo);
btn_receiverthree = (Button) findViewById(R.id.btn_recevierthree);
container = (LinearLayout) findViewById(R.id.container);
btn_receiverthree.setOnClickListener(this);
btn_receivertwo.setOnClickListener(this);
btn_recevierone.setOnClickListener(this);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
// 解除广播
unregisterReceiver(broadCast);
super.onDestroy();
}
/**
* 为按钮设置监听事件
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_recevierone:
// 发送广播
intent = new Intent();
intent.setAction("com.example.broadcastone");
sendBroadcast(intent);
break;
case R.id.btn_receviertwo:
// 发送广播
intent = new Intent();
intent.setAction("com.example.broadcasttwo");
sendBroadcast(intent);
break;
case R.id.btn_recevierthree:
// 发送广播
intent = new Intent();
intent.setAction("com.example.broadcastthree");
sendBroadcast(intent);
break;
default:
break;
}
}
}
2.一个继承BroadcastReceiver的类BroadCast.java:
public class BroadCast extends BroadcastReceiver {
private LinearLayout linearLayout;
public BroadCast(LinearLayout linearLayout) {
this.linearLayout = linearLayout;
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action=intent.getAction();
System.out.println("注册广播:"+action);
if(action.equals("com.example.broadcastone")){
linearLayout.setBackgroundColor(0xffFF0012);
}else if(action.equals("com.example.broadcasttwo")){
linearLayout.setBackgroundColor(0xff000000);
}else if(action.equals("com.example.broadcastthree")){
linearLayout.setBackgroundColor(0xffcccc);
}
}
}
3.布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/btn_recevierone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="广播------------之一"
/>
<Button
android:id="@+id/btn_receviertwo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="广播------------之二"
/>
<Button
android:id="@+id/btn_recevierthree"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="广播------------之三"
/>
</LinearLayout>
4.效果如下: