程序管理器显示的数据——
获取系统程序和用户程序信息
技术点:1、应用程序和包名区别 应用程序ApplicationInfo是PackageInfo的子集 PackageManager.getInstalledApplications():获取到的是清单文件中application节点中的数据 PageageManager.getInstalledPackages():获取到的是清单文件中所有的数据 Android下两个重要的管理者 //ActivityManager 相当于windows下的进程管理器-Activity管理者 //PackageManager 相当于windows下的程序管理器-包管理者 // packageManager.getApplicationInfo(packageName, flags); //获取应用程序信息
// packageManager.getApplicationIcon(info);//获取应用程序图标
// packageManager.getApplicationLabel(info)//获取应用程序名称
应用:如果应用的状态过多,可以这样定义,如:一个电视频道的状态,游戏的状态机(满足很多条件才能做某件事) 3、ApplicationInfo中定义的常量,用一个int值来表示该应用的各种信息, ApplicationInfo applicationInfo = packageInfo.applicationInfo; public static final int FLAG_SYSTEM = 1<<0; //if set, this application is installed in the * device's system image. public static final int FLAG_DEBUGGABLE = 1<<1; public static final int FLAG_HAS_CODE = 1<<2; ...... public static final int FLAG_CANT_SAVE_STATE = 1<<28; int flags = packageInfo.applicationInfo.flags; //Flags associated with the application. flags是该应用程序信息的标识,一个int来表示,每一位代表一个信息, 所以,要想知道某一位是否设置了,只需要将该flags和某一位进行与操作, 如果为0,说明该位没有设置,否则,表示该位设置了。 (ApplicationInfo.FLAG_SYSTEM & flags) != 0 应用:如上面的手机频道项目,一个频道有n多个属性,该频道是否免费,是否优惠,是否在套餐中,是否18岁以上才能看等10几个属性,可以这样定义, private int isFree = 1<<0; private int isFavorable 1<<1; private int isInCombo 1<<2; ...... 要想判断一个频道是否具备某些属性,只需要将该频道的flag和某一个属性进行与操作, 如果结果不等于0,说明具备该属性。 重要:对于一些状态较多的,可以借鉴这种方式定义状态 4、Container error表示模拟器不支持的错误:低版本的模拟器不支持,只有android4.1和intel的吗,模拟器支持,真机支持 android:installLocation="preferExternal"更倾向于外部sdcard卡, |
核心代码:
|
结果: |