Android中的广播用的太多了,今天稍微总结一下。
按注册方式分为两种:
1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一个activity上点击按钮,发送一条广播,这条广播弹出一个toast,显示“静态”二字。
先看看广播接受者:
public class MyBroadcast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context,"静态", Toast.LENGTH_LONG).show();}}清单文件中注册:
<receiver android:name="com.example.staticbroadcast.MyBroadcast" ><intent-filter><action android:name="com.test.StaticBroadcast" /></intent-filter></receiver>
activity中的点击事件(发送广播):
this.static_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction("com.test.StaticBroadcast");sendBroadcast(intent);}});2.动态注册:动态注册一般是在activity中的onStart()方法中注册,在onStop()方法中解除注册,代码如下:
public class MainActivity extends Activity {private Button static_btn;private Button dynamic_btn;private BroadcastReceiver myBroadcastReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.static_btn = (Button) this.findViewById(R.id.button1);this.dynamic_btn = (Button) this.findViewById(R.id.Button01);myBroadcastReceiver = new BroadcastReceiver(){@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(MainActivity.this,"你好,这里是动态广播!", Toast.LENGTH_LONG).show();}};// this.static_btn.setOnClickListener(new OnClickListener() {//// @Override// public void onClick(View v) {// Intent intent = new Intent();// intent.setAction("com.test.StaticBroadcast");// sendBroadcast(intent);// }// });this.dynamic_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//发送广播Intent intent = new Intent();intent.setAction("DynamicBroadcast");sendBroadcast(intent);}});}@Overrideprotected void onStart() {super.onStart();//注册广播IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("DynamicBroadcast");registerReceiver(myBroadcastReceiver, intentFilter);}@Overrideprotected void onStop() {super.onStop();//取消注册unregisterReceiver(myBroadcastReceiver);}}关于静态注册的细节:
android:exported=”true”这个属性表示该广播接收器是否接收来自其他App发出的广播,如果有intent-filter属性,则默认为true,否则默认为false。
每个广播接收者都可以接受多个广播源,如果是静态注册,那么你要这么做:
<receiver android:exported="true"android:name="com.example.staticbroadcast.MyBroadcast" ><intent-filter><action android:name="com.test.StaticBroadcast" /><action android:name="com.test.StaticBroadcast2"/></intent-filter></receiver>
在广播接收器中这样处理:
@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("com.test.StaticBroadcast")) {Toast.makeText(context, "静态", Toast.LENGTH_SHORT).show();} else if (intent.getAction().equals("com.test.StaticBroadcast2")) {Toast.makeText(context, "静态2", Toast.LENGTH_SHORT).show();}}如果是动态注册,注册方式如下:
@Overrideprotected void onStart() {super.onStart();//注册广播IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("DynamicBroadcast");intentFilter.addAction("DynamicBroadcast2");registerReceiver(myBroadcastReceiver, intentFilter);}广播接收器中的处理方式与静态注册一致。
关于怎样使用broadcast实现activity和fragment之间的通信可以查看我的另一篇博客使用Broadcast实现android组件之间的通信
原文地址:http://blog.csdn.net/u012702547/article/details/46955787
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。