看来这个东西应该专门开一个帖子了,发现这个包里面的东西太多,以前写的很零碎不容易找
查询系统使用的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);
- }
- }
- }
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;
- }
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();
- }
- }
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
}