当前位置: 首页 > news >正文

Android学习笔记-----------广播

Android学习笔记-----------广播

一.广播接收者的注册

  1.动态注册

    动态注册就是在代码中进行注册,调用的是registerReceiver(BroadcastReceiver broadcastReceiver, IntentFileter interFileter)方法,具体步骤如下:

    a).创建一个类,使其继承BroadcastReceiver类.重写其onReceive方法,onReceive方法中所执行的代码就是广播接收者接收到广播后所要执行的程序;

    b).在定义一个IntentFileter对象,调用其addAction(String action)方法,action就是你要接收的广播类型;

    c).调用registerReceiver(BroadcastReceiver broadcastReceiver, IntentFileter interFileter)方法注册广播接收者.

  以下是代码示例:

 1 public class MainActivity extends BaseActivity {
 2 
 3     private IntentFilter intentFilter;
 4     private MyBroadcastReciver broadcastReciver;
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         // 注册广播接收者
11         intentFilter = new IntentFilter();
12         // 当前广播接收者可以一条com.sjj.getactivityname.MyBroadcastReciver类型的广播
13         intentFilter.addAction("com.sjj.getactivityname.MyBroadcastReciver");
14         broadcastReciver = new MyBroadcastReciver();
15         registerReceiver(broadcastReciver, intentFilter);
16     }
17 
18     @Override
19     protected void onDestroy() {
20         // 当退出时,注销广播接收者,释放内存
21         unregisterReceiver(broadcastReciver);
22         super.onDestroy();
23     }
24 
25     class MyBroadcastReciver extends BroadcastReceiver {
26 
27         @Override
28         public void onReceive(Context context, Intent intent) {
29             // 当收到广播后,吐司
30             Toast.makeText(context, "动态注册的广播接收者", 0).show();
31         }
32 
33     }
34 }

  2.静态注册

    静态注册是在清单文件中对广播接收者进行注册,具体方式与注册Activity的方式一样,接收的广播类型与前面动态注册的广播接收者是一致的.

1  <receiver
2             android:name="com.sjj.register.broadcastrevicer.MyBroadcastReciver"
3             >
4             <intent-filter >
5                 <action android:name="com.sjj.getactivityname.MyBroadcastReciver"/>
6             </intent-filter>
7  </receiver>

 二.发送广播

  发送广播有两种形式,一种是发送标准广播,标准广播的特点在于接收此广播的广播接收者都会在同一时间接收到这个广播.

  第二种是有序广播,有序广播的特点是接收这种类型的广播接收者收到广播是有先后顺序的

  1.发送标准广播

    和Activity的跳转一样,发送广播也需要一个意图(Intent)对象,调用其setAction(String action)方法设置要发送的广播类型,在通过sendBroadcast(Intent intent)方法来发送广播

    以下是代码示例

 1 Button btSend = (Button) findViewById(R.id.bt_sendstandard);
 2         //通过按钮的点击事件来发送广播
 3         btSend.setOnClickListener(new View.OnClickListener() {
 4             
 5             @Override
 6             public void onClick(View v) {
 7                 //创建意图对象
 8                 Intent intent = new Intent();
 9                 //设置发送的广播类型
10                 intent.setAction("com.sjj.getactivityname.MyBroadcastReciver");
11                 //发送广播
12                 sendBroadcast(intent);
13             }
14         });

 

   2.发送有序广播

    发送有序广播的方法调用的方法是sendOrderedBroadcast();可以设置IntentFileter的属性priority来控制广播接收者优先级;

    在广播接收者的onReceive方法中调用abortBroadcast()来中断广播的传递;

    以下是代码示例

 1 public class MainActivity extends ActionBarActivity {
 2     private IntentFilter filter;
 3     private MyBroadcastReciver broadcastReciver;
 4     private MySecondBroadcastReciver broadcastReciver2;
 5     private Button btSendBroadcasr;
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         btSendBroadcasr = (Button) findViewById(R.id.bt_sendbroadcast);
11         filter = new IntentFilter();
12 //        //设置第一个广播接收者的优先级
13 //        filter.setPriority(100);
14         filter.addAction("com.sjj.sendoderbroadcast.MyBroadcast");
15         broadcastReciver = new MyBroadcastReciver();
16         //注册第一个广播接收者
17         registerReceiver(broadcastReciver, filter);
18         //设置第二个广播接收者的优先级
19         filter.setPriority(100);
20         filter.addAction("com.sjj.sendoderbroadcast.MyBroadcast");
21         broadcastReciver2 = new MySecondBroadcastReciver();
22         //注册第二个广播接收者
23         registerReceiver(broadcastReciver2, filter);
24         btSendBroadcasr.setOnClickListener(new View.OnClickListener() {
25             
26             @Override
27             public void onClick(View v) {
28                 Intent intent = new Intent();
29                 intent.setAction("com.sjj.sendoderbroadcast.MyBroadcast");
30                 //发送有序广播
31                 sendOrderedBroadcast(intent,null);
32             }
33         });
34     }
35     
36     @Override
37     protected void onDestroy() {
38         super.onDestroy();
39         //退出程序,注销注册
40         unregisterReceiver(broadcastReciver);
41         unregisterReceiver(broadcastReciver2);
42     }
43 }

 

三.本地广播

  前面的定义的广播与广播接收者都是全局的,发送的广播可以被其他程序的收到,相同也可以收到其他程序发出的广播;

  本地广播的使用范围只限于定义这个广播的应用程序;

  需要注意的是,本地广播的广播接收者注册和发送本地广播都需要广播管理者(LocalBroadcastManager)来执行.

  以下是代码示例:

  

 1 public class MainActivity extends ActionBarActivity {
 2 
 3     private Button btSendLocalBroadcast;
 4     private IntentFilter intentFilter;
 5     private LocalBroadcastManager broadcastManager;
 6     private MyBroadcast myBroadcast;
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_main);
11         btSendLocalBroadcast = (Button) findViewById(R.id.bt_send_localbroadcast);
12         //初始化变量
13         intentFilter = new IntentFilter();
14         myBroadcast = new MyBroadcast();
15         //初始化广播管理者
16         broadcastManager = LocalBroadcastManager.getInstance(MainActivity.this);
17         intentFilter.addAction("com.sjj.localBroadcast.MyBroadcast");
18         //通过广播管理者注册广播接收者
19         broadcastManager.registerReceiver(myBroadcast,intentFilter);
20         //通过点击按钮来发送广播
21         btSendLocalBroadcast.setOnClickListener(new View.OnClickListener() {
22             
23             @Override
24             public void onClick(View v) {
25                 Intent intent = new Intent("com.sjj.localBroadcast.MyBroadcast");
26                 //通过广播管理者来发送广播
27                 broadcastManager.sendBroadcast(intent);
28             }
29         });
30     }    
31     
32     @Override
33     protected void onDestroy() {
34         // TODO Auto-generated method stub
35         super.onDestroy();
36         //通过广播管理者注销注册
37         broadcastManager.unregisterReceiver(myBroadcast);
38     }
39 }

 

转载于:https://www.cnblogs.com/Jhope/p/5325906.html

相关文章:

  • Ajax跨域访问
  • UILabel和Scrollview结合用,label高度自适应
  • Analytics.js简介
  • YII文件上传
  • Linux下ssh远程连接慢解决
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • 高项-3月30号培训作业
  • ThreadPoolExecutor运行机制
  • 循环创建按钮
  • python3-itertools模块和迭代器函数
  • Java字节码浅析(三)
  • swift学习笔记
  • Java静态代码分析工具——FindBugs插件的安装与使用
  • 好看的网站
  • 面试题解答
  • 3.7、@ResponseBody 和 @RestController
  • 77. Combinations
  • Angular Elements 及其运作原理
  • bootstrap创建登录注册页面
  • chrome扩展demo1-小时钟
  • css的样式优先级
  • markdown编辑器简评
  • php ci框架整合银盛支付
  • React 快速上手 - 07 前端路由 react-router
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SpiderData 2019年2月25日 DApp数据排行榜
  • vue中实现单选
  • 爱情 北京女病人
  • 飞驰在Mesos的涡轮引擎上
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 老板让我十分钟上手nx-admin
  • 前端面试总结(at, md)
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链共识机制优缺点对比都是什么
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • #考研#计算机文化知识1(局域网及网络互联)
  • (14)Hive调优——合并小文件
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (待修改)PyG安装步骤
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (三)elasticsearch 源码之启动流程分析
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十六)Flask之蓝图
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)关于pipe()的详细解析
  • (转)项目管理杂谈-我所期望的新人
  • **CI中自动类加载的用法总结
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core 实现 Redis 批量查询指定格式的Key