首页 > 系统 > Android > 正文

Android基础知识之broadcast广播详解

2019-12-12 06:13:47
字体:
来源:转载
供稿:网友

Android中的广播用的太多了,今天稍微总结一下。
按注册方式分为两种:

1.静态注册广播:
静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一个activity上点击按钮,发送一条广播,这条广播弹出一个toast,显示“静态”二字。

先看看广播接受者:

public class MyBroadcast extends BroadcastReceiver {  @Override  public 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() {      @Override      public 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;  @Override  protected 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(){      @Override      public 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() {      @Override      public void onClick(View v) {        //发送广播        Intent intent = new Intent();        intent.setAction("DynamicBroadcast");        sendBroadcast(intent);      }    });  }  @Override  protected void onStart() {    super.onStart();    //注册广播    IntentFilter intentFilter = new IntentFilter();    intentFilter.addAction("DynamicBroadcast");    registerReceiver(myBroadcastReceiver, intentFilter);  }  @Override  protected 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>

在广播接收器中这样处理:

  @Override  public 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();    }  }

如果是动态注册,注册方式如下:

  @Override  protected 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表