BroadcastReceiver类


java.lang.Object

   ?
android.content.BroadcastReceiver

已知直接子类

  • AppWidgetProvider
  • DeviceAdminReceiver,
  • WakefulBroadcastReceiver

类概述

基类代码会收到sendbroadcast()意图。

假设你不须要在应用程序发送广播,考虑使用localbroadcastmanager类取代下面描写叙述的更一般的设施。这会给你一个更有效的实现(没有跨进程通信的须要),相关的其他应用程序可以接收或发送你的广播。同意你避免思考不论什么安全问题。

你能够通过Context.registerReceiver() 动态注冊这一类的上下文的一个实例。或静态公布一个<receiver>标签在你的AndroidManifest.xml配置文件。

注意:

假设在Activity.onResume()动态注冊一个接收器,你应该在 Activity.onPause()取消它的活动。(暂停时你不会接受意图,这将降低不必要的系统开销)。

不要在Activity.onSaveInstanceState()取消活动。

由于这不会被称为是用户在历史堆向后移动。

广播能够接收两大类

  1. 正常广播( Context.sendBroadcast发送)是全然异步的。全部的广播接收者是执行在一个不确定的顺序。往往在同一时间。这是更有效的,但意味着接收机无法使用的结果或中止API包括在这里。
  2. 有序广播(Context.sendOrderedBroadcast发送)被传递到一个接收器在时间。因为每一个接收器执行反过来,它能够传播的结果到下一个接收器,或全然放弃广播这样不会被传递到其它的接收机。

    命令接收器能够执行在android:priority :匹配的意图过滤器优先级属性。具有同样优先级的接收器将执行在一个随意的顺序

即使在正常广播的情况下,系统可能在某些情况下,恢复一次传送广播接收机。特别是。接收器。可能须要一个创造的过程。仅仅有一个将执行在一个时间来避免超载的系统的新工艺。

然而在这样的情况下,非顺序的语义,觉得:这些接收器还不能返回的结果或中止其广播。请注意。虽然意图类用于发送和接收这些广播,广播机构的意图是从这里的意图是用来启动活动中全然分离 Context.startActivity()。没有办法让中看到或捕获用于startactivity()意图;相同。当你广播的意图,你将永远找不到或启动活动。这两个操作在语义上是很不同的:从一个意向活动是一个前台操作,改动什么用户当前交互;广播意图是后台操作,用户通常不知道。

BroadcastReceiver类(启动时作为一个组件通过一个明显的 <receiver>标签)是一个应用程序的整个生命周期的一个重要组成部分。

主题

了解怎样使用这个类来接收和解决的意图。阅读Intents
and Intent Filters
开发人员指南。

  1. 安全保障

    1. 接收器使用的Context API本身就是一种跨应用设施,所以你必须考虑其它的应用程序可能滥用他们。一些须要考虑的事情是:

      1. 意图命名空间是全局。确保意图动作名称和其它的字符串写入一个你自己的命名空间中,否则你可能会无意中与其它应用程序发生冲突。
      2. 你使用registerReceiver(BroadcastReceiver,
        IntentFilter)
        。不论什么应用程序能够发送广播接收器,注冊。

        你能够控制谁能够发送广播。它通过权限描写叙述例如以下。
      3. 当你公布一个接收器在你的应用程序清单并为其指定的intent过滤器,不论什么其它的应用程序能够发送广播,它无论你指定的过滤器。

        要防止其它人发送给它,使它无法使用android:exported="false".
      4. 当你使用sendBroadcast(Intent) 或相关的方法,通常不论什么其它应用程序能够接收这些广播节目。

        你能够通过广播接收权限控制谁能够接收。

        另外,通过ICE_CREAM_SANDWICH,,你也能够用Intent.setPackage限定广播在一个应用中存在

    2. 使用 LocalBroadcastManager时这些问题不存在。由于它从来没有意图去运行当前进程外。
    3. 訪问权限能够通过发送者或接收者广播一个运行。
    4. 强制许可发送时,你提供非空的权限 sendBroadcast(Intent, String) 或者sendOrderedBroadcast(Intent,
      String, BroadcastReceiver, android.os.Handler, int, String, Bundle)
      。仅仅有那些被授予此权限接收器(通过请求与 <uses-permission> 标签在AndroidManifest.xml)将可以接收广播。
    5. 强制接收时,注冊广播时候你提供非空权限——要么当调用registerReceiver(BroadcastReceiver,
      IntentFilter, String, android.os.Handler)
       或者在你的AndroidManifest.xml静态 <receiver> 标签。

      仅仅有那些已被授予该权限的广播(通过在AndroidManifest.xml的 <uses-permission>标签。

      )将可以发送一个意图接收器。

    6. Security and Permissions 文档了解一般的权限和安全性。
  2. 接收生命周期
    1. 一个BroadcastReceiver对象仅仅有唯一有效的调用 onReceive(Context,
      Intent)
      。你从这个函数返回的代码,系统考虑该对象完毕还是失效。
    2. onReceive(Context,
      Intent)
      运行这具有重要的影响:不论什么须要异步操作是不可用的,由于你将须要从函数返回来处理异步操作,但在这一点上BroadcastReceiver不在活跃。异步操作完毕之前这种系统是免费的删除过程。
    3. 特别是,你可能不会显示一个对话框或绑定到一个服务于一个BroadcastReceiver。对于前者,你反而应该用NotificationManager API。对于后者,你能够使用Context.startService()将命令发送到服务。
  3. 过程生命周期
    1. 眼下正在运行中的boiadcastReceiver这一个过程。(也就是说,眼下在onReceive(Context,
      Intent)
       方法执行)被觉得是一个前景的过程,将保持执行的系统除了极端的内存压力的情况下。
    2. 一旦你返回onreceive()。BroadcastReceiver不再活跃,和其宿主进程仅仅为执行在它的不论什么其它应用程序组件一样重要。这是特别重要的,由于假设仅仅是举办过程中(的应用程序,用户没有或不近期互动的一个常见的情况),然后在从onreceive()系统还将考虑其过程是空的,积极地杀死它使资源可用于其它更重要的过程。
    3. 这意味着更长的执行操作,你会常常在一个BroadcastReceiver把含有进程的积极为您的整个操作时间的同一时候使用一个服务。

嵌套类

BroadcastReceiver.PendingResult

状态的结果正在等待一个广播接收器

BroadcastReceiver类中方法

时间: 06-12

BroadcastReceiver类的相关文章

BroadcastReceiver.PendingResult类

java.lang.Object android.content.BroadcastReceiver.PendingResul 类概述 状态的结果正在等待一个广播接收器.在BroadcastReceiver.onReceive()中通过goAsync()返回. 广播没有终止允许你从onReceive()返回:完成广播你必须调用一次finish(). 这允许你处理广播的应用程序的主线程 在线程中注意:这个类的内部状态本身不是线程安全的,然而如果你确信你没有比赛你可以从任何线程使用它.通常这意味着你

Android BroadcastReceiver

Broadcast Receiver:接听用户程序或系统程序所发出的broadcast intent,属于系统级别的监听器,拥有自己的进程,可以使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息,在应用程序中实现Broadcast Receiver来监听和响应这些广播的Intent.匹配Intent的BroadcastReceiver都可能被启动 事件广播要构建Intent然后调用sendBroadcast()方法将广播发出,事件的接收是通过定义一个继承Broadcas

Android学习笔记--BroadcastReceiver

---恢复内容开始--- 过了一个没有假期的10.1,今天来把之前学的东西复习一下,BroadcastReceiver,Android四大组件之一,为什么这么说,百度一下,你就知道, BroadcastReceiver分为两种广播,一种是常驻型,一种是非常驻型,常驻型是在XML中国注册的被称为常驻型,在代码中注册的被称作为非常驻型, 第一步,先建立一个JAVA文件,继承与BroadcastReceiver类, MyBind.java 1 package com.wuxianedu.guangbo

基础篇:4.熟练掌握BroadcastReceiver的接收和使用

1.广播 既然要谈论到广播接收器,那必然先要来谈谈广播,毕竟两者相辅相成.在Android系统中有各种各样的广播如常见的:电池的使用状态.电话的接听.短信的接收等.应用开发者也可以在程序中发送出各种广播.那么广播到底是个什么东西?!---广播是一种广泛运用在应用程序之间传输信息的机制.广播的发送可以通过以下两种方式发送: (1)Context.sendBroadcast---广播无序事件,理论上,所有的接收者同时接收到广播. (2)Context.sendOrderedBroadcast---广

Android总结六(BroadcastReceiver)

一.接收广播消息 1.什么是BroadcastReceiver? BroadcastReceiver是Android系统四大组件之一,本质上就是一种全局的监听器,用于监听系统全局的广播消息. 2.怎样创建BroadcastReceiver? 1)创建一个类继承自BroadcastReceiver类: 2)在AndroidManifest.xml配置<receiver>节点信息. 3.一旦实现了BroadcastReceiver,接下来就应该制定该BroadcastReceiver能匹配的Int

Android:静态注册BroadcastReceiver

动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,但是它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreate()方法中的.那么有没有什么办法可以让程序在未启动的情况下就能接收到广播呢?这就需要使用静态注册的方式了. 下面附上静态注册的代码: MainActivity.java: package com.example.staticbroadcastreceiverdemo; import android.app.Activity; i

Android——BroadcastReceiver 广播 短信拦截

/** * 如何去理解BroadcastReceiver(广播)?   * 其实可以这样想,首先我们要有一个发送广播的“媒体”,在这个例子中,我们暂且用activity组件作为这个媒体,当然以后 * 会用到service,或者随机启动方式来发送广播,这看业务需求来决定. * 在这个例子中,当点击按钮的时候,一条广播就发送了出去,同样用到了意图对象Intent. * 和启动activity和service一样,我们需要为意图对象设置“标记”和“包裹”,它就像个基站,向世界发送信号. * 而对于广播

Android 源码系列之&lt;二&gt;从安全的角度深入理解BroadcastReceiver(上)

提起BroadcastReceiver大家都很熟悉,它和Activity,Service以及ContentProvider并称为Android的四大组件(四大金刚),可见BroadcastReceiver的重要性,今天我们主要从安全的角度来讲解称为四大组件之一的BroadcastReceiver.可能有的童靴看到这里会有疑问,BroadcastReceiver有啥好讲的,不就是先定义自己的广播接收器然后在manifest.xml文件中注册,在需要发送广播的地方调用Context的sendBroa

[Android] BroadcastReceiver总结

BroadcastReceiver的定义 广播是一种广泛运用的在应用程序之间传输信息的机制,主要用来监听系统或者应用发出的广播信息,然后根据广播信息作为相应的逻辑处理,也可以用来传输少量.频率低的数据. 在实现开机启动服务和网络状态改变.电量变化.短信和来电时通过接收系统的广播让应用程序作出相应的处理. BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以通过启动 Service .启动 Activity 或是 Noti