zoukankan      html  css  js  c++  java
  • Android基础_BroadcastReceiver

    一:什么是BroadcastReceiver

    Broadcast(广播)是一种广泛运用于在应用程序之间一步传播消息的机制
    系统消息
    Android系统发出的,电池不足、来电信息等
    自定义消息
    第三方应用发出的广播消息

    广播消息本质上就是一个Intent对象
    Intent是一对一的通信,广播消息是一对多的通信

    BroadcastReceiver用于接受并处理广播消息
    BroadcastReceiver没有用户界面
    借助其他方式和用户交互,例如,启动Activity、使用Notification等

    二.广播消息的处理流程

    1.广播消息的处理分为三个环节:1.消息发送  2.BroadcastReceiver注册   3.消息处理

    2.系统广播都被定义为android.content.Intent中的Action常量

    3.利用BroadcastReceiver实现onReceive方法 。捕获系统广播ACTION_BOOT_COMPLETED可以轻松实现开机后程序自动运行

    4.在AndroidManifest.xml文件中增加应用权限声明

    <uses-permission android:name="com.mybroadcast.permission"/>

    广播消息发送方式有多种
    无序广播:sentBroadcast(),效率高,但是消息处理器之间没有关联
    有序广播:sendOrderedBroadcast(),可以传递处理数据
    持续广播:sendStickyBroadcast()发送的广播一直存在

    三.发送一个普通广播

     1.发送一个普通广播

    //发送一个普通广播(1:发广播,2:注册一个接收者,3:处理广播)
        public void send_broadcast(View iew){
            Intent intent=new Intent();
            intent.setAction("com.gdnf.broadcast_1");//自定义一个广播地址
            intent.putExtra("message","2018年1月1号放假一天");
            //开始广播
            sendBroadcast(intent,"com.mybroadcast.permission");
        }

     2.静态注册一个接收者

    1 <!--静态注册一个广播接收者-->
    2         <receiver
    3             android:permission="com.mybroadcast.permission"
    4             android:name="com.example.broadcast_receiver.Broadcast_Receiver_1">
    5             <!--过滤接收什么样的广播-->
    6             <intent-filter>
    7                 <action android:name="com.gdnf.broadcast_1"/>
    8             </intent-filter>
    9         </receiver>

     3.定义一个广播接收者

    /**
     * 定义了一个广播接收者
     */
    public class Broadcast_Receiver_1 extends BroadcastReceiver{
    
        //对接收到的广播进行处理
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i("Broadcast_Receiver_1","Broadcast_Receiver_1接收到广播");
            String message=intent.getStringExtra("message");
            Log.i("Broadcast_Receiver_1","Broadcast_Receiver_1收到消息:"+message);
        }
    }

    四.发送一个有序广播

    1.

       //发送有序广播
        public void send_order_broadcast(View view){
            Intent intent=new Intent("com.gdnf.broadcast_order");

    sendOrderedBroadcast(intent,null,null,null,0,"发放1万过年补贴",null);
     }

    2.注册接收者,并且声明接收者收到广播的先后顺序

    priority降序排列,值最大的,最先收到广播。依次类推
            <receiver android:name="com.example.broadcast_receiver.OrderBroadcast_1">
                <intent-filter android:priority="10">
                    <action android:name="com.gdnf.broadcast_order"/>
                </intent-filter>
            </receiver>
            <receiver android:name="com.example.broadcast_receiver.OrderBroadcast_2">
                <intent-filter android:priority="9">
                    <action android:name="com.gdnf.broadcast_order"/>
                </intent-filter>
            </receiver>
            <receiver android:name="com.example.broadcast_receiver.OrderBroadcast_3">
                <intent-filter android:priority="8">
                    <action android:name="com.gdnf.broadcast_order"/>
                </intent-filter>
            </receiver>

    3.以上面为例 priority="10"最先收到广播可以对广播内容进行修改后再把广播发送出去

    public class OrderBroadcast_1 extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            String message=intent.getStringExtra("message");
            String date=getResultData();//获取数据
            Log.i("OrderBroadcast_1","OrderBroadcast_1第一个收到广播"+message);
            Log.i("OrderBroadcast_1","通知内容是:"+date);
            setResultData("发放3000过年补贴");
        }
    }

    priority="9"接收到的内容已经改变,依次类推。

  • 相关阅读:
    mysql 中表和数据库名称不要使用 '-' 命名
    htmlElement.style 是只读属性
    chrome 远程调试相关问题
    纯小白入手 vue3.0 CLI
    纯小白入手 vue3.0 CLI
    纯小白入手 vue3.0 CLI
    《前端之路》- TypeScript (四) class 中各类属性、方法,抽象类、多态
    《前端之路》- TypeScript (三) ES5 中实现继承、类以及原理
    《前端之路》- TypeScript(二) 函数篇
    《前端之路》--- 重温 Egg.js
  • 原文地址:https://www.cnblogs.com/Crezy/p/8085731.html
Copyright © 2011-2022 走看看