zoukankan      html  css  js  c++  java
  • Android四大组件之—— BroadcastReceiver的使用

    BroadcastReceiver又名广播接收者。既然它用于接收广播,那一定就有人负责发送。

    Android系统中的广播:

    在现实生活中,我们都知道广播是什么,用来做什么。例如公园里的广播,主要通知游客什么事情发生了,应该做什么,

    不应该做什么。Android系统中的广播跟现实生活中的基本一样,主要用于消息的传递。

    广播接收者可在java代码中动态注册,也可以在AndroidManifest文件中注册

    有序广播和无序广播

    先来说一下无序广播。还是用公园里的广播作为例子,只要广播一发送出去,所有人基本上都同时听到。

    它是异步传输的,这就是无序广播。它的特点是传输速度快。但无序广播不能被拦截和被终止。

    无序广播使用sendBroadcast方法发送。

    有序广播按照一定的顺序发送出去,权限高的接收者先接收到广播信息,该接收者可修改广播中的信息,

    然后再将广播向下级传播;也可以终止广播的传播。

    BroadcastReceiver类的创建

    通过简单的继承BroadcastReceive类并实现onReceive方法就可以创建自己的广播接收者类

    private class NormalBroadcastReceiver extends BroadcastReceiver
    {
          @Override
          public void onReceive(Context context, Intent intent)
          {
               String data = intent.getStringExtra("data");  
               Toast.makeText(getBaseContext(), data, Toast.LENGTH_SHORT).show();
          }    
    }

    完整代码:

    在下面的代码段中,我们通过onResume方法注册广播接收者,在onPause方法中取消广播接收者的注册

    当然了,也可以在AndroidManifest文件中注册,这样的广播接收者一旦注册就不能取消。

    package com.whathecode.broadcastreceiverdemo;
    
    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends Activity
    {
        
        //实例化广播接收者
        NormalBroadcastReceiver nbr = new NormalBroadcastReceiver();
        
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        
        @Override
        protected void onResume()
        {
            super.onResume();
            //注册广播接收者
            registerReceiver(nbr, new IntentFilter("com.whathecode.broadcastreceiverdemo"));
        }
        
        @Override
        protected void onPause()
        {
            super.onPause();
            //取消注册广播接收者
            unregisterReceiver(nbr);
        }
        
        public void sendOrder(View view)
        {
            Intent orderBroadcast = new Intent();
            orderBroadcast.setAction("com.whathecode.broadcastreceiverdemo");
            orderBroadcast.putExtra("data", "我是有序广播");
            //发送有序广播
            sendOrderedBroadcast(orderBroadcast, null);
        }
        
        public void sendDisorder(View view)
        {
            Intent intent = new Intent();
            intent.setAction("com.whathecode.broadcastreceiverdemo");
            intent.putExtra("data", "我是无序广播");
            //发送无序广播
            sendBroadcast(intent);
        }
        
        
        //继承BroadcastReceiver类,实现onReceive方法
        private class NormalBroadcastReceiver extends BroadcastReceiver
        {
    
            /**
             * 当广播被接收的时候这个方法被调用
             */
            @Override
            public void onReceive(Context context, Intent intent)
            {
                //获取广播中的信息并用Toast打印出来
                String data = intent.getStringExtra("data");
                
                Toast.makeText(getBaseContext(), data, Toast.LENGTH_SHORT).show();
            }
            
        }
    }

    运行效果:

    BroadcastReceiver

  • 相关阅读:
    linux运维学习
    2017年阿里巴巴三面经验
    Spring Boot:在Spring Boot中使用Mysql和JPA
    meshroom和alicevision在Ubuntu16上的安装过程
    ubuntu rm -rf ntfs 硬盘恢复
    python 脚本内部修改 LD_LIBRARY_PATH
    python uml 图
    tlmgr 相关
    ubuntu 安装 clangd 10.0.0
    zsh 快捷键
  • 原文地址:https://www.cnblogs.com/ai-developers/p/4272639.html
Copyright © 2011-2022 走看看