ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Android】BroadcastReceiver

2021-06-08 09:57:52  阅读:171  来源: 互联网

标签:接收 广播 Intent 注册 Android BroadcastReceiver android


BroadcastReceiver详解

BroadcastReceiver概述


BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。


在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。


Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。


广播的俩种注册方式

静态注册


  • 静态注册需要在AndroidManifest.xml文件中的节点里进行注册
    自定义一个类来继承BroadcastReceiver
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

public class MyBroadReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"自定义广播接收者收到了信息",Toast.LENGTH_SHORT).show();
        Log.e("aaaaaaa","接收到广播啦");
    }
}

然后在xml文件里面进行注册

<receiver android:name=".BroadcastReceiver.MyBroadReceiver">
       <intent-filter>
           <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
</receiver>

动态注册


动态注册只需要在activity里注册就行

myBroadcastReceiver broadcastReceiver = new myBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(broadcastReceiver,intentFilter);

俩种广播类型

标准广播


完全异步执行的广播,所有的广播接收器会在同一时间接收到广播
标准广播就是

Intent intent = new Intent("android.net.conn.CONNECTIVITY_CHANGE");
sendBroadcast(intent);

有序广播


同步执行的广播,同一时间只有一个广播接收器可以接收到广播(按照优先级来,优先级越高越早接收到,优先级可选-1000-1000),当这个广播的逻辑完成之后才会传给下一个广播,并且在此广播接收的时候还可以终止,这样下面的就不会再次接收到此广播了。

Intent intent = new Intent("android.net.conn.CONNECTIVITY_CHANGE");
sendOrderedBroadcast(intent);

优先级的设置

<receiver android:name=".BroadcastReceiver.MyBroadReceiver">
       <intent-filter android:priority="1000">
           <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
</receiver>

本地广播


前面写的广播都是全局广播!这同样意味着我们APP发出的广播,其他APP都会接收到, 或者其他APP发送的广播,我们的APP也同样会接收到,这样容易引起一些安全性的问题!而 Android中给我们提供了本地广播的机制,使用该机制发出的广播只会在APP内部传播,而且 广播接收者也只能收到本应用发出的广播!
本地广播无法通过静态注册方式来接受,相比起系统全局广播更加高效

LocalBroadReceive localBroadReceive = new LocalBroadReceive();
//实例化localBroadManager
localBroadcastManager = LocalBroadcastManager.getInstance(getApplicationContext());
//注册本地广播
//本地广播只可以动态注册
IntentFilter intentFilter = new IntentFilter("com.example.local.broadcast");
localBroadcastManager.registerReceiver(localBroadReceive,intentFilter);

标签:接收,广播,Intent,注册,Android,BroadcastReceiver,android
来源: https://blog.csdn.net/heiren_a/article/details/117688641

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有