zoukankan      html  css  js  c++  java
  • [Android] 关于getinstalledpackages参数的分析

    reference to  : http://blog.csdn.net/luojiusan520/article/details/47696891

    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_ACTIVITIES+ PackageManager.GET_RECEIVERS    等于 3; 参数中填入3则得到这两个的flag对应的信息。

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

  • 相关阅读:
    关于MySQL数据库优化的部分整理
    PHP跨域form提交
    px、dp和sp,这些单位有什么区别?
    301和302 Http状态有啥区别?
    PHP HTTP请求
    php的http_build_query使用
    nginx ssi 模块
    MongoDB学习笔记(一) MongoDB介绍及安装(摘)
    Django Admin 录入中文错误解决办法
    关于python字符串连接的操作
  • 原文地址:https://www.cnblogs.com/0616--ataozhijia/p/5696856.html
Copyright © 2011-2022 走看看