• 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了。

  • 相关阅读:
    关于xcode中证书安装问题
    iOSOpenDev 安装流程
    openCV
    POJ2081(Recaman's Sequence)
    POJ1163(The Triangle)
    POJ3620(Avoid The Lakes)
    POJ1160(Post Office)
    POJ3177(Redundant Paths) or POJ3352(Road Construction)
    POJ1953(World Cup Noise)
    POJ1904(King's Quest)
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6501432.html
Copyright © 2020-2023  润新知