关于getinstalledpackages參数的分析。

此blog不写API的使用方法仅仅分析此參数的知识点。


今天学习安卓突然学习到了getinstalledpackages()的方法获取到安装应用信息 ,他接收一个int flags的值。然后在网上查询资料全是 将Int  值 设置为0  即比方


PackageManager manager = context.getPackageManager();// 得到包的管理者
List<PackageInfo> installedPackages = manager.getInstalledPackages(0);


本想查看源码看看0是什么參数。结果就出现了问题,參数例如以下

public static final int GET_ACTIVITIES              = 0x00000001;
public static final int GET_RECEIVERS               = 0x00000002;
public static final int GET_SERVICES                = 0x00000004;
public static final int GET_PROVIDERS               = 0x00000008;
...0x00000010;
0x00000020;
0x00000040;
0x00000040;
0x00000080;
0x00000100;
0x00000200;
0x00000400;
0x00000800;
0x00001000;
0x00002000;
0x00004000;
 

            每一个flag參数的意思。见名思意是用来获取对应的包信息。所有是16进制表示的int的数。可是疑惑没有0。网上查询没有对应的信息,于此思考许久留下笔记留下印象。

通过观察源码帮组我分析的信息例如以下:

(1)观察源码凝视flags Additional option flags. Use any combination of   ....flag       

 方法前后文英文大意:额外信息通过flag获得,使用flag的不论什么组合。

    看到这条源码组合(combination )二字事实上问题就解决一半了。

           意思是能够用来组合 随意的flag 。加入不论什么flag到參数中;


(2)通过观察其它 參数 既static final int 的值 

比方:

public static final int COMPONENT_ENABLED_STATE_ENABLED = 1;

 public static final int COMPONENT_ENABLED_STATE_DISABLED = 2;

 public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3;

为何都是设置的 10进制的值。,看到这里我想我已经攻克了问题,


(3)分析方法參数的值。换算为2进制;

依次为:00000001       00000010             00000100        00001000    ...................    这样设置的优点就是 随意组合的特征码都是唯一的。

不会參生混淆

比方               16+8 = 24                24仅仅能由參数中此两个数而得到。

32+2=34                     同理

64 +8=72                 同理            

  

假设flag採用 十进制1  。2,3,4,5,6,7的方式进行 处理的话      当方法中数为 特定的数时候可能出现不同的组合。所以就不能使用此方式。由于计算机是不会智能处理人的需求的。


得出我的结论例如以下:

參数0 是   表示不接受不论什么flag信息。当然也可以返回得到一些主要的包信息。,可是如 PERMISSIONS  RECEIVERS  等等就返回不了。假设flag值不匹配 而方法中强行获取相相应的值。返回值为Null,已经做过測试

延伸: PackageManager.GET_ACTIVITIESPackageManager.GET_RECEIVERS    等于 3; 參数中填入3则得到这两个的flag相应的信息。


注意点 :PackageManager.GET_ACTIVITIES| PackageManager.GET_ACTIVITIES    和上为一样的效果。 由于相或的话 同位仅仅要有一个1则为1,

   


以上均为个人看法。

原文地址:https://www.cnblogs.com/yfceshi/p/7001844.html