Apk信息的获取
使用PM(PackageManager)和AM(ActivityManager)管理APK
PM负责包管理,AM负责Activity管理
在Mainifest.xml中,
activity与receiver标签会被系统封装为ActivityInfo类
service标签则会被封装为ServiceInfo类
application标签会被封装为ApplicationInfo类,ApplicationInfo包含很多Flag,FLAG_SYSTEM表示系统应用,FLAG_EXTRERNAL_STORAGE表示安装在SD上的应用,使用这些Flag可以判断应用的类型
mainifest标签则会被封装为PackageInfo类,包含了所有activity与service的信息
ResolveInfo则是封装intent标签的上一级信息,有可能是ActivityInfo也有可能是ServiceInfo,用来帮助我们找到含有特定intent的信息
有了上面各种Bean对象后,PackageManager就可以通过调用各种方法,返回不同的Bean对象了,有以下常见的方法:
getPackageManager(); // 返回一个PackageManager对象
getApplicationInfo();// 以ApplicationInffo的形式返回指定包名的ApplicationInfo
getApplicationIcon(); // 返回指定包名的ICON
getInstalledApplication(); //以ApplicationInfo的形式返回安装的应用
getInstalledPackages(); // 以PackageInfo的形式返回安装的应用
queryIntentActivities(); // 返回指定Intent的ResolveInfo对象,Activity集合
queryIntentAcrivity();// 返回指定intent的Activity
resolveService(); // 返回指定Intent的Service
通过PackageInfo筛选不同类型的App
将app相关信息封装为一个新的bean:
import android.graphics.drawable.Drawable;
import java.util.List;
/**
* Created by feathers on 16-11-19.
*/
public class PMAppInfo {
private String appLabel; //App名称
private Drawable appIcon; //App图标
private String pckName; // App包名
public String getAppLabel() {
return appLabel;
}
public void setAppLabel(String appLabel) {
this.appLabel = appLabel;
}
public Drawable getAppIcon() {
return appIcon;
}