Android4.0系统接收不到广播的问题解析

在3.1之后,系统的package manager增加了对处于“stopped state”应用的管理,这个stopped和Activity生命周期中的stop状态是完全两码事,指的是安装后从来没有启动过和被用户手动强制停止的应用,与此同时系统增加了2个Flag:FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES ,来标识一个intent是否激活处于“stopped state”的应用。当2个Flag都不设置或者都进行设置的时候,采用的是FLAG_INCLUDE_STOPPED_PACKAGES的效果。

有了上面的新机制之后,google觉得给所有的广播intent默认加上FLAG_EXCLUDE_STOPPED_PACKAGES会非常的Cooooool,能在一定程度上避免流氓软件、病毒啊干坏事,还能提高效率,就导致了本文题目中说的问题,RECEIVE_BOOT_COMPLETED广播如果用户没有运行过应用,就不会响应了。

不过google还是留了点余地,对于自定义的广播我们可以通过

setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);这个方法来唤醒处于“stopped state”的程序,也就是用户自己写的广播intent可以控制这个机制,但是系统自带的广播intent,由于不能修改,就只能接受这个现实了

例如:

Intent startIntent = new Intent();
startIntent.putExtra("pkg", getPackageName());
startIntent.setAction("com.lenovo.speechcamera.start");
startIntent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(startIntent);

时间: 2024-11-01 19:32:20

Android4.0系统接收不到广播的问题解析的相关文章

关于解决android4.0系统中菜单无法添加Icon的问题

在Android4.0系统中,创建菜单Menu,然后通过setIcon方法给菜单添加图标是无效的,图标不会显出来,而之前的系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,其中有private boolean mOptionalIconsVisible = false;属性使得无法显示菜单图标. 但是,我们又无法在开发的应用程序中创建MenuBuilder这个对象的(因为MenuBuilder是系统内部的框架类). 当然如果不是很需要

解决android4.0系统中菜单(Menu)添加Icon无效问题

在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,该类的部分源码如下: 1 public class MenuBuilder implements Menu { 2 ... 3 private boolean mOptionalIconsVisible = false; 4 .... 5 void setOptional

android4.0浏览器在eclipse中编译的步骤

工程源码: 注意: 如果下载已经修过的源码,只要进行3.4.8步骤就应该可以了. eclipse版本:adt-bundle-windows (Android Developer Tools Build: v21.0.0-519525) 1.从android4.0系统的代码中拷贝一份浏览器的代码,到本地文件夹,并重命名为BrowserEclipse: < android4.0源码>/package/apps/Browser  -->  <本地目录>/BrowserEclipse

从0系统学Android--4.1探究碎片

从0系统学Android--4.1探究碎片 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 第四章:手机平板要兼顾--探究碎片 平板电脑和手机最大的区别就在于屏幕的大小,一般手机的屏幕大小会在 3 英寸到 6 英寸之间,而一般平板电脑屏幕大小会在 7 英寸到 10 英寸之间.屏幕大小差距过大会导致同样的界面视觉效果有很大的差异. 为了兼顾手机和平板开发,Android 3.0 引入了碎片的概念,可以让界面在平板上更好的展示. 4.1 碎片是什么 碎片

从0系统学Android--4.2 Fragment 生命周期

从0系统学Android-- 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 4.3 碎片的生命周期 碎片也有自己的生命周期,并且和 Activity 的生命周期还很像. 4.3.1 碎片的状态和回调 运行状态 当一个碎片可见,并且它所关联的活动正处在运行状态时,这个碎片也处于运行状态. 暂停状态 当一个 Activity 进入暂停状态时,与它相关联的可见碎片就会进入到暂停状态. 停止状态 当一个活动进入了停止状态时,与他关联的碎片就会进入到停止状态

第8章 Android 4.0系统的下载与编译

第8章  Android 4.0系统的下载与编译 本章首先的准备Android下载与编译环境,内容主要分为:准备Android下载与编译环境.下载源码.编译源码及内核源码.下载Android 4.0及Goldfish源码中包括下载并初始化repo工具.下载Android源码.其他源码下载源.下载模拟器Goldfish内核源码.编译Android及Goldfish内核源码中切换到Android源码目录命令:$cd WORKING_DIRECTORY 执行如下命令,加载编译过程中用到的命令.环境变量

android4.0蓝牙使能的详细解析

此博客是转载过来的哦... 给自己博客定几个部分: (1)写在前面的话:一些写博客时的废话. (2)内容简介:把文章的主要内容或者核心部分作一个框架性的概括,以方便大家阅读. (3)正文:这个不需要解释了.   写在前面的话:这是csdn上的第一篇博客,希望自己能够坚持写下去,也希望能够得到大家的支持.本文可能会涉及大量的源码注释,在文字方面可能不够尽如人意,希望真正想理解该过程的同学们能够耐心看下去. 内容简介:本文详细分析了android4.0中蓝牙使能的过程,相比较android2.3,4

Android4.0 input事件输入流程详解(中间层到应用层)

在Android系统中,类似于键盘按键.触摸屏等事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序进行处理.系统启动时,窗口管理服务也会启动,该服务启动过程中,会通过系统输入管理器InputManager来负责监控键盘消息.当某一个Activity激活时,会在该Service下注册一个接收消息的通道,表明可以处理具体的消息,然后当有消息时,InputManager就会分发给当前处于激活状态下的Activity进行处理. InputManager的启动

Android开发之深入理解Android 7.0系统权限更改相关文档

摘要: Android 6.0之后的版本增加了运行时权限,应用程序在执行每个需要系统权限的功能时,需要添加权限请求代码(默认权限禁止),否则应用程序无法响应:Android 7.0在Android 6.0的基础上,对系统权限进一步更改,这次的权限更改包括三个方面: APP应用程序的私有文件不再向使用者放宽 Intent组件传递file://URI的方式可能给接收器留下无法访问的路径,触发FileUriExposedException异常,推荐使用FileProvider DownloadMana