• 关于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,

       


    以上均为个人看法。

  • 相关阅读:
    codevs 1163:访问艺术馆
    codevs 2853:方格游戏
    冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱
    HDU 1317:XYZZY
    codevs 1380:没有上司的舞会
    POJ 1734:Sightseeing trip
    lesson 23 one man's meat is another man's poison
    wordlist 4
    TPO-12 C1 Revise a Hemingway paper
    lesson 22 by heart
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7001844.html
Copyright © 2020-2023  润新知