Android之广播

Posted 猫咪大王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android之广播相关的知识,希望对你有一定的参考价值。

(以下内容是阅读郭霖大神的《第一行代码》后自己总结的)

1、概述

广播是android的四大组件之一。

Android的广播机制十分灵活。

 

2、发送广播

如上图Android的广播主要分为两类:标准广播和有序广播。

所有的广播接收器都可以接收到标准广播,而且他们的接收几乎是在同一时刻。这意味着标准广播的效率很高,但无法被截断。

在接收有序广播时,广播接收器是由先后顺序的,优先级高的接收器先接收到广播,并且有权对该广播截断,不让后续接收器接收到。

发送标准广播和有序广播的方式非常简单。

//发送标准广播
sendBroadcast.setOnClickListener(new View.onClickListener(){
            
    @Override
    public void onClick(View v){
        Intent intent = new Intent("com.example.broadcastTest.MY_BROADCAST");
        sendBroadcast(intent);
    }
});
//发送有序广播
sendBroadcast.setOnClickListener(new View.onClickListener(){
            
    @Override
    public void onClick(View v){
        Intent intent = new Intent("com.example.broadcastTest.MY_BROADCAST");
        sendOrderedBroadcast(intent,null);
    }
});

下图是Android API中对sendBroadcast()和sendOrderedBroadcast()的注解。

3、接收广播

当然,发送广播后没有接收器也是白搭。

3.1 创建接收器

创建广播接收器很简单,只需要新建一个类,让它继承BroadcastReceiver,并重写父类中的onReceive()方法就可以了。

//创建一个广播接收器
public class NetworkChangeReceiver extends BroadcastReceiver{
    
    @Override
    public void onReceive(Context context,Intent intent){
        Toast.makeText(context,"Network change !",
            Toast.LENGTH_SHORT).show();
    }
    
}

3.2 注册广播接收器

当然,只创建广播接收器是没有用的。广播接收器还需要注册,表示它能够接收到哪种广播。

接收器的注册分为动态注册和静态注册。

动态注册则是在代码中完成注册。静态注册是在AndroidManifest.xml中注册。

3.2.1 动态注册

动态注册的广播需要程序启动才能开始接收广播。

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    intentFilter = new IntentFilter();    //         
  intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//
    networkChangeReceiver = new NetworkChangeReceiver();//
    registerReceiver(networkChangeReceiver,intentFilter);//
}   

动态注册的接收器,一定要取消注册。

@Override
protected void onDestroy(){
    super.onDestroy();
    unregisterReceiver(networkChangeReceiver);
}  

下面是registerReceiver()和unregisterReceiver()在Android API中的说明。

3.2.2 静态注册

静态注册则不需要程序启动,手机开启就能接收到广播。静态注册则是在AndroidManifest.xml中申明。

<receiver android:name=".NetworkChangeReceiver" >
  <intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_ CHANGE" />
  </intent-filter>
</receiver>

 

4 总结

总结而言,运用Android的广播机制,我们需要做到以下几点

如果监听自定义广播,

  1、使用sendBroadcast()或sendOrderedBroadcast()方法,发送定义的广播

  2、创建广播接收器,继承自BroadcastReceiver(),并重写onReceive()方法。在onReceive()方法中实现接收到广播后的响应动作。

  3、注册广播接收器,让广播接收器能接收到广播。广播接收器可以动态注册或者静态注册。动态注册需要取消注册。

如果是监听系统广播,上面三步我们只需要做后面两步就Ok了。

 

以上是关于Android之广播的主要内容,如果未能解决你的问题,请参考以下文章

Android开发之广播

Android - 在动态注册的广播接收器上出现“无法传递广播”错误

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

android 之广播机制

Android安卓四大组件之广播

从广播接收器更改片段