看来这个东西应该专门开一个帖子了,发现这个包里面的东西太多,以前写的很零碎不容易找
查询系统使用的Content Providers
for (PackageInfo pack : getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS)) {
ProviderInfo[] providers = pack.providers;
if (providers != null) {
for (ProviderInfo provider : providers) {
Log.d("Example", "provider: " + provider.authority);
}
}
}
class PInfo {
private String appname = "";
private String pname = "";
private String versionName = "";
private int versionCode = 0;
private Drawable icon;
private void prettyPrint() {
log(appname + "\t" + pname + "\t" + versionName + "\t" + versionCode + "\t");
}
}
private void listPackages() {
ArrayList<PInfo> apps = getInstalledApps(false); /* false = no system packages */
final int max = apps.size();
for (int i=0; i<max; i++) {
apps.get(i).prettyPrint();
}
}
private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {
ArrayList<PInfo> res = new ArrayList<PInfo>();
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
if ((!getSysPackages) && (p.versionName == null)) {
continue ;
}
PInfo newInfo = new PInfo();
newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();
newInfo.pname = p.packageName;
newInfo.versionName = p.versionName;
newInfo.versionCode = p.versionCode;
newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
res.add(newInfo);
}
return res;
}
用这个方法来获取系统内所包含的Applications信息:
private void listPackages() {
ArrayList < PInfo > apps = getInstalledApps(false); /* false = no system packages */
final int max = apps.size();
for (int i=0; i < max; i++) {
apps.get(i).prettyPrint();
}
}
01 PackageManager manager = this.getPackageManager();
02 try {
03
04 PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
05 String packageName = info.packageName;
06 int versionCode = info.versionCode;
07 String versionName = info.versionName;
08
09 } catch (NameNotFoundException e) {
10 // TODO Auto-generated catch block
11 }