关于getinstalledpackages参数的分析。

原创 2015年08月16日 06:27:00

此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,

   


以上均为个人看法!

版权声明:欢迎你来转载,不过请带个此Blog链接!

getInstalledPackages的参数详解

getInstalledPackages
  • u014729294
  • u014729294
  • 2016年07月04日 17:54
  • 1929

android 开发中不可不知的技巧

https://github.com/ZQiang94/Andriod-collect-blogs      掘金
  • qq_35224673
  • qq_35224673
  • 2016年08月15日 09:02
  • 5453

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下PackageManager packageManager = this.getPackageManage...
  • feng88724
  • feng88724
  • 2011年02月21日 19:37
  • 88454

关于getinstalledpackages参数的分析。

此blog不写API的用法只分析此参数的知识点。 今天学习安卓突然学习到了getinstalledpackages()的方法获取到安装应用信息 ,他接收一个int flags的值,然后在网上查询资...
  • luojiusan520
  • luojiusan520
  • 2015年08月16日 06:27
  • 5233

android pm命令实现

android终端提供了一些cmd,开发人员可以通过这些cmd获取信息和执行任务。比较常用的有am,pm,input等,今天讲讲pm命令是如何实现的。 pm经常用的是安装apk以及查询系统安...
  • zhudaozhuan
  • zhudaozhuan
  • 2016年03月19日 12:00
  • 4635

Android包管理

//得到PackageManager对象 PackageManager pm = getPackageManager(); //得到系统安装的...
  • chaod5659
  • chaod5659
  • 2013年11月20日 16:35
  • 2715

Android开发人员不得不收集的代码(不断更新)

为方便查找,已进行大致归类,其大纲如下所示: 尺寸相关 dp与px转换sp与px转换各种单位转换在onCreate()即可获取View的宽高ListView中提前测量View尺寸 ...
  • u013512708
  • u013512708
  • 2016年08月01日 12:34
  • 1156

Android中获取应用程序(包)的信息-----PackageManager的使用(一)

转载请注明出处:http://blog.csdn.net/qinjuning                 本节内容是如何获取Android系统中应用程序的信息,主要包括packagena...
  • wf_fln
  • wf_fln
  • 2017年10月10日 13:58
  • 95

Android获取应用程序信息——PackageManager的基本使用

在我们实际开发中,我们常需要获取应用的一些信息来使用,比如获取应用程序基本信息、获取permission是否注册等。这些信息获取都借助于Android给我们提供的PackageManager进行获取,...
  • Mr_dsw
  • Mr_dsw
  • 2016年05月07日 22:04
  • 12921

同步代码块。同步方法 synchronized

package com.antiy.avlpro.manager; import android.content.Context; import android.content.pm.Package...
  • a916879788
  • a916879788
  • 2017年03月17日 15:51
  • 141
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于getinstalledpackages参数的分析。
举报原因:
原因补充:

(最多只允许输入30个字)