判断应用是系统程序还是用户程序?

if((context.getPackageManager().getPackageInfo(包名,0).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) !=0)

如果值为true,说明是系统程序。
如果值为false,说明是用户程序。


原理解析

ApplicationInfo.FLAG_SYSTEM=public static final int FLAG_SYSTEM = 1<<0;用二进制表示:0000 0000 0000 0000 0000 0000 0000 0001
且每个Flag状态都不一样,会往左<<一个或几个,即
0000 0000 0000 0000 0000 0000 0000 0001、
0000 0000 0000 0000 0000 0000 0000 0010、
0000 0000 0000 0000 0000 0010 0000 0000。
聪明的你发现症节所在了吧,因为Flag,都是向左移动一个1,所以两个Flag相与,只能是等于0和不等于0。
等于0:两个Flag不相等
不等于0:两个Flag相等
为什么安卓要这样设计呢,好像是可以让代码更简洁,且提升一点性能。

你可能感兴趣的:(简-android)