简单的小例子,一个是只有一个Receiver捕捉有网络改变的常驻广播,另外一个是在第一个的基础上增加了一个Activity。试验证明,第一种情况是收不到广播的! 第二种情况是可以收到广播的。所以android程序中,不能只有一个Receiver组件,必须还要Activity。据说这是google对android应用程序安全的考虑,防止流氓软件潜水消耗资源,正所谓禁止潜水也!

  • Android应用在未启动的情况下无法收到指定广播

一 、问题现象 
最近项目上遇见这样一个需求,在程序安装之后,需要收到特定广播,我当时想到的方案是在AndroidMainfest文件里添加一个静态注册的广播,比如:

 <receiver android:name=".receiver.XXXReceiver">
<intent-filter>
<action android:name="XXX.XXX"/>
</intent-filter>
</receiver>

本以为这样就完事了,但是在测试过程中发现如果程序曾经启动过一次,那么一切都正常,如果是新安装应用,重来都没启动过,这个时候是收不到广播的。。。。

二、问题分析 
我是觉得这个不是什么多大的问题,但是测试妹子让我解决,好吧,只好网上收一收答案,一查发现这是因为Android在3.1以后将新安装的应用置为“STOPPED”状态,只有当应用启动过一次之后这个状态才会改变。 至于这样改的目的是什么啦?这个就需要大家自己去考虑了。。

三、问题解决方法 
这个问题我们需要修改两个地方来解决, 
1、在静态注册广播的时候 指定exported = true

<receiver android:name=".receiver.AddWidgetReceiver"
android:exported="true">
<intent-filter>
<action android:name="XXX.XXX"/>
</intent-filter>
</receiver>

2、在发送intent的地方加上FLAG_INCLUDE_STOPPED_PACKAGES

Intent intent = new Intent();
intent.setAction("XXX.XXX");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(intent);

原因是从Android 3.1开始,系统给Intent定义了两个新的Flag,分别为FLAG_INCLUDE_STOPPED_PACKAGES(表示包含未启动的App)和FLAG_EXCLUDE_STOPPED_PACKAGES(表示不包含未启动的App),用来控制Intent是否要对处于停止状态的App起作用。

Android无法收到指定广播的问题总结的更多相关文章

  1. Android开发学习—— Broadcast广播接收者

    现实中:电台要发布消息,通过广播把消息广播出去,使用收音机,就可以收听广播,得知这条消息.Android中:系统在运行过程中,会产生许多事件,那么某些事件产生时,比如:电量改变.收发短信.拨打电话.屏 ...

  2. Android四大组件之一“广播”

    前言 Android四大组件重要性已经不言而喻了,今天谈谈的是Android中的广播机制.在我们上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就 ...

  3. Android 四大组件之三(广播)

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...

  4. Android系统中的广播(Broadcast)机制简要介绍和学习计划

    在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制:这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用:本文通过一个 ...

  5. [Android应用开发] 05.广播和服务

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. 九、Android学习第八天——广播机制与WIFI网络操作(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 九.Android学习第八天——广播机制与WIFI网络操作 今天熟悉了An ...

  7. Android组件系列----BroadcastReceiver广播接收器

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  8. Android应用程序发送广播(sendBroadcast)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6744448 前面我们分析了Android应用程 ...

  9. Android应用程序注册广播接收器(registerReceiver)的过程分析

    前 面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/发布机制,因此,使用这种消息驱动模型的第一步便是订阅消息:而对 Android应用程序来说,订阅消息其实就是注册广播接收器, ...

随机推荐

  1. 并发编程 04——闭锁CountDownLatch 与 栅栏CyclicBarrier

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  2. HashMap其实就那么一回事儿之源码浅析

    上篇文章<LinkedList其实就那么一回事儿之源码分析>介绍了LinkedList, 本次将为大家介绍HashMap. 在介绍HashMap之前,为了方便更清楚地理解源码,先大致说说H ...

  3. Javascript中对象的Obeject.defineProperty()方法-------------(ES5/个人理解)

    在讲到Obeject.defineProperty()方法之前先得说明一下ECMAScript中有两种属性:数据属性和访问器属性. 两种属性存在的意义:描述对象属性(key)的一些特性,因为这些属性是 ...

  4. iOS开发UI篇—UIScrollView控件介绍

    iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...

  5. Cisco防火墙配置

    帮朋友调试一台ASA,做一下记录(很久没动手了) 三个区: vlan10: inside: 192.168.1.1 vlan20: outside: 202.102.1.1 vlan30: dmz: ...

  6. 转发自AstralWind的博客(python正则表达式)

    原文地址:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python ...

  7. redhat6.4上安装mysql

    1.挂载操作系统介质 [root@server- ~]# mkdir -p /media/dvd [root@server- ~]# -20130130.0-Server-x86_64-DVD1.is ...

  8. AngularJs的UI组件ui-Bootstrap分享(五)——Pager和Pagination

    ui-bootstrap中有两个分页控件,一个是轻量级的Pager,只有上一页和下一页的功能,另一个是功能完整的Pagination,除了上一页和下一页,还可以选择首页和最后页,并且支持多种页数的显示 ...

  9. Qt之WebKit学习之绘图

    void Serial::on_pushButton_clicked() { //scroll(4,0); flag_btn = true; // this->update(); //绘图绘在窗 ...

  10. 性能测试报告的指标选择、数据选择和分析的参考【以Apache AB test为例】

    前几天尝试用loadrunner初试了一下性能测试,对于如何选择数据.生成数据后如何分析很是迷惑,刚刚翻看一篇网友的博客,很有条理,特此记录一下,以供参考 转自: http://liriguang.i ...