0x 01 前提约束:

0x001

静态检查:指用action限定Intent,并使用包管理器的queryBroadCastReceivers方法,在flags字段置为0时查找ResolveInfo,检查结果是指它有没有找到组件

0x002

         动态检查:指在指定 包名&类全路径名构成的ComponentName后,调用包管理器的getComponentEnabledSetting方法,得到它的状态值,注意它是一个Int类型,可能取值及意义如下所列。

0x003

          动态修改:指在指定 包名&类全路径名构成的ComponentName后,调用包管理器的setComponentEnabledSetting方法,传入下面的三个值中的任意一个,设置enabled字段。

0x004

PackageManager.COMPONENT_ENABLED_STATE_DEFAULT

    Int 值为0 ,指在manifest中没有显示声明

PackageManager.COMPONENT_ENABLED_STATE_ENABLED

    Int 值为1 ,指在manifest中声明为 android:enabled=”true”

PackageManager.COMPONENT_ENABLED_STATE_DISABLED

    Int 值为2 ,指在manifest中声明为 android:enabled=”false”

0x02 Demo 结果总结:

0x001 使用静态方式,修改不了enabled字段的值。

0x002 无论在manifest中被声明为true|false|默认,其对应动态检查结果都是0(还未动态改)。

0x003 对应在manifest中显示声明为 android:enabled=”true”时,无论动态修改值(0|1|2),使用静态检查时都是返回true;当动态修改它的值为2时,收不到广播,(0|1)时能收到。

0x004  对应在manifest中显示声明为 android:enabled=”false”时,如果程序动态将它的值修改成1时,使用静态检查可以找到组件,且其值仍然为false,但是可以收到广播,其它值(0|2)时,找不到对应组件,也收不到广播。

0x005  对应在manifest中没有显示声明时,则,动态修改它的值为2时,静态检查找不到对应组件,也收不到广播,其它值(0|1)时,静态检查值为true且能收到广播。

0x03 预备实现:

0x001

          在sdk 中生成优先级时,对于检查push必须的Receivers:

先静态检查,看能否找到对应的组件,如果没有找到组件(包括根本就没有声明Receiver时,注意是没有找到组件,并不是“找到组件,只是值为false”),则直接返回优先级为0,否则默认检查通过,按照优先级生成算法生成优先级。

0x002

            一种 case:一开始时在manifest中配置成android:enabled=”false”, 然后在将来的某个时刻尝试启用这个组件,即使得它可以收到广播。由以上结果知,如果不动态修改它的值,那么默认为0,静态检查是找不到这个组件,从而该广播也不能正常被使用。所以,在启用时,执行:动态将其值改为1,然后在重新调用startWork时进行新的一轮静态检查,这是发现它是通过的,所以可以生成优先级。

0x003

           如果想关闭一个集成百度push的app,只要使得它的优先级降为0,可以发现:如果动态的将它们的值设置为2,然后再调用starWork进行新一轮静态检查时,将会发现找不到,从而将优先级置为0。

静态设置

动态设置

预期状态

静态值

可找到组件

可收到广播

没显示声明

True

True

True

True

DEFAULT

True

True

True

True

ENABLED

True

True

True

True

DISABLED

False

True

False

False

True

True

True

True

True

DEFAULT

True

True

True

True

ENABLED

True

True

True

True

DISABLED

False

False

False

False

False

False

——

False

False

DEFAULT

False

——

False

False

ENABLED

True

False

True

True

DISABLED

False

——

False

False

没有注册

——

False

False

False

False

从上面的表中可以得到,不论是哪种分类,只要动态将其置为ENABDLED,则静态检查都可以收到,同时也可以收到广播,但是,如果将其动态置为DISABLED,则几种情况下静态都检测不到组件。所以得在调用startWork时,只做静态检查(检查能否找到组件,而不是它的activityInfo.enabled字段的值是true还是false)。

0x04 注:测试中发现

0x001

          在动态修改了组件的DISABLED/ENABDLED状态时,当应用退出或者重启后,这个动态修改的结果是持久的。

0x002

如果机子没有卸载,只是重装,则这些DISABLED/ENABDLED并不会被新安装的覆盖。

android 静态和动态设置 Receiver的 android:enabled值的更多相关文章

  1. 【Android】TextView动态设置android:drawableLeft|Right|Top|Bottom,SetColor

    Android中有时需动态设置控件四周的drawble图片,这个时候就需要调用 setCompoundDrawables(left, top, right, bottom),四个参数类型都是drawa ...

  2. 3D touch 静态、动态设置及进入APP的跳转方式

    申明Quick Action有两种方式:静态和动态 静态是在info.plist文件中申明,动态则是在代码中注册,系统支持两者同时存在. -系统限制每个app最多显示4个快捷图标,包括静态和动态 静态 ...

  3. iOS App3D Touch快捷键的静态以及动态设置详细使用

    1. 功能支持 3D-Touch 只在 iOS 9 及以上版本得到支持,之前版本的 iOS 并不支持该功能:3D-Touch 只在 iPhone 6s 及以后型号的 iPhone 或 iPad Pro ...

  4. Android代码中动态设置图片的大小(自动缩放),位置

    项目中需要用到在代码中动态调整图片的位置和设置图片大小,能自动缩放图片,用ImageView控件,具体做法如下: 1.布局文件 <RelativeLayout xmlns:android=&qu ...

  5. android自定义控件,动态设置Button的样式

    原文  http://www.cnblogs.com/landptf/p/4562203.html 今天来看一个通过重写Button来动态实现一些效果,如圆角矩形.圆形.按下改变字体,改变背景色,改变 ...

  6. Android 软件盘 动态设置 layout

    总体来说分为三种方法: 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: ...

  7. Android开发之动态设置字体的样式和粗细

    字体设置通常有两种形式: 1:在xml中直接设置 android:textStyle="bold" android:typeface="sans" 2:用jav ...

  8. layui 时间插件laydate中动态设置改变min和max值

    <div class="layui-inline"> <label class="layui-form-label">申请时间</ ...

  9. Ext.form.Label组件动态设置html值

    解决方法: (1)用的是 Ext.getCmp(id).setText('XXXX')可以动态设置label 显示的文本值,但是文本中有个别数字需要改变颜色显示,需要加样式,这种方法会把加样式的标签( ...

随机推荐

  1. 洛谷——P1163 银行贷款

    P1163 银行贷款 题目描述 当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款.这个问题要求计算出贷款者向银行支付的利率.假设利率按月累计. 输入输出格式 输入格式: 输入文 ...

  2. 【Docker】基本命令使用介绍

    # docker命令行学习 ## docker run- docker run --help:老实说这条最管用了- docker run -it:交互模式,允许控制台输出 - docker run - ...

  3. 用Python处理邮件,全文完

    http://www.chinaunix.net/old_jh/55/575710.html

  4. 【数论】【枚举约数】【友好数】CODEVS 2632 非常好友

    O(sqrt(n))枚举约数,根据定义暴力判断友好数. #include<cstdio> #include<cmath> using namespace std; int n; ...

  5. 【二分图】【最大匹配】【匈牙利算法】CODEVS 2776 寻找代表元

    裸的匈牙利,存模板. #include<cstdio> #include<vector> #include<cstring> using namespace std ...

  6. 【kruscal】【最小生成树】【离线】洛谷 P2266 爱的距离

    建图:每个点向它四周的点连边权为两点点权的差的绝对值的边. 由于有多个需要“施法”的点,所以相当于对每个这样的点,询问与它的距离在T以内的最长边的最小值,即多次询问. 最长边最小之类的,肯定是最小生成 ...

  7. [CSAcademy]Connected Tree Subgraphs

    题目大意: 给你一棵n个结点的树,求有多少种染色方案,使得染色过程中染过色的结点始终连成一块. 思路: 树形DP. 设f[x]表示先放x时,x的子树中的染色方案数,y为x的子结点. 则f[x]=pro ...

  8. JQuery获取第几个元素和判断元素在第几个

    HTML代码: <ul> <li>jQuery判断当前元素是第几个元素示例</li> <li>jQuery获取第N个元素示例</li> &l ...

  9. Cisco模拟器Web-IOU使用说明 转

    http://blog.sina.com.cn/s/blog_af0abf1f0102uztk.html   GNS3作为使用最多的Cisco官方模拟器,是因为它使用简单,所有设置图形化,是一款非常强 ...

  10. XCode编译速度慢的解决方案

    提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubta ...