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中包裹具体的广播内容,即可实现数据得传输。
  • 相关阅读:
    一个老程序员的从零开始的从新出发
    Django静态文件配置
    Data truncated for column 'id' at row 1
    MyBatis之java.lang.UnsupportedOperationException异常解决方案
    mybatis批量查询-插入-删除
    Mybatis中进行批量更新(updateBatch)
    mybatis插入insert操作,返回自增id
    redis五大数据类型
    redis中key键操作
    Redis主从复制失败(master_link_status down)
  • 原文地址:https://www.cnblogs.com/godwithus/p/5530473.html
Copyright © 2011-2022 走看看