zoukankan      html  css  js  c++  java
  • Android框架中的广播机制

    一、广播通过Intent发送出去

    // 定义广播的意图过滤器
    private String action = "com.xxx.demo.Broadcast.STATUS_CHANGED";
    // 发送广播
    Intent intent = new Intent();
    intent.setAction(action);
    ServiceSimulation.this.sendBroadcast(intent);

    二、定义接收该广播的BroadcaseReceiver类

    1、继承自android.content.BroadcastReceiver;

    2、必须实现其onReceive方法,并在其中完成被触发的所有动作;

    public class ServiceBroadcastReceiver extends BroadcastReceiver{
    
        /**
         * 本对象在接收到广播时创建,并执行onReceive方法,
         * 一旦onReceive方法执行完毕(return),
         * 本对象即被销毁(阅后即焚机制)。
         * 下次接收到广播时会再次重新创建本对象,再次执行阅后即焚机制。
         */
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO do someing...
        }
    
    }

     3、必须注册;

    (1)在AndroidManifest.xml中注册(静态注册):

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            
            <receiver android:name=".ServiceBroadcastReceiver">
                <intent-filter >
                    <action android:name="com.xxx.demo.Broadcast.STATUS_CHANGED"/>
                </intent-filter>
            </receiver>
            <!-- Exported receiver does not require permission -->
        </application>

    注意:您必须确保<action>的android:name属性取值为一个全局唯一的字符串!

    (2)在代码中注册(动态注册):

    1、声明广播接收器

        // 注册ServiceSimulation的广播接收器
        ServiceBroadcastReceiver receiver;
    // STATUS_CHANGED是ServiceSimulation发送广播的频道 private final static String STATUS_CHANGED = "com.xxx.demo.Broadcast.STATUS_CHANGED";

    2、创建IntentFilter对象;

    3、调用Context.registerReceiver()方法注册;

        /**
         * 注册ServiceSimulation的广播接收器
         */
        private void registerServiceBroadcastReceiver(){
            
            // 实例化广播接收器对象receiver,该对象为类成员变量
            receiver = new ServiceBroadcastReceiver();
            
            // 创建意图过滤器对象
            IntentFilter filter = new IntentFilter();
            
            // 为意图过滤器对象设置Action,即:广播频道
            filter.addAction(STATUS_CHANGED);
            
            // 注册该广播接收器
            MainActivity.this.registerReceiver(receiver, filter);
            
        }

    3、调用Context.unregisterReceiver()方法注销。

        /**
         * 注销ServiceSimulation的广播接收器
         */
        private void unregisterServiceBroadcastReceiver(){
            
            // 注销广播接收器对象receiver,该对象为类成员变量
            MainActivity.this.unregisterReceiver(receiver);
        }

     三、广播的内容

    调用Context.sendBroadcast(intent)发送广播时,在参数intent中包裹具体的广播内容,即可实现数据得传输。
  • 相关阅读:
    数值分析实验之常微分方程的数值解法(MATLAB实现)
    Hadoop 伪分布模式安装
    Word 如何标齐选项
    在windows上安装elasticsearch7.6
    《转载》python/人工智能/Tensorflow/自然语言处理/计算机视觉/机器学习学习资源分享
    使用fastai训练的一个性别识别模型
    小程序录音、上传、转格式、语音识别爬坑记(微信版本:6.6.7及以上)
    centos 7.0 下安装FFmpeg软件 过程
    用python实现matlib的 生成高斯模糊核
    opencv如何在jupyter notebook中显示图片
  • 原文地址:https://www.cnblogs.com/godwithus/p/5530473.html
Copyright © 2011-2022 走看看