android.content.pm包裡的類都是管理應用程式的。
擷取已安裝應用程式資訊
通過Activity的getPackageManager()方法可以得到PackageManager的對象
1.PackageManager 的getInstalledPackages(int flags)方法可以得到所有安裝在機器上的程式的包資訊類對象List<PackageInfo>,PackageInfo類中有一值applicationInfo可以得到Application的對象。
2.PackageManager的getInstalledApplications(int flags)方法可以得到所有安裝在機器上的程式的application對象List<ApplicationInfo>;
Application類繼承類PackageItemInfo,在PackageItemInfo類中有方法loadIcon(PackageManager
pm)返回應用程式圖示Drawable類型。有方法loadLabel(PackageManager
pm)返回應用程式名稱,CharSequence類型。
ApplicationInfo中無法擷取版本號碼和版本名。PackageInfo類中有包名、版本名、版本號碼。
如果只需要安裝程式的名字和圖片而不需要版本號碼和版本名資訊,用方法2擷取ApplicationInfo。如果都需要,用方法1擷取PackageInfo,再通過PackageInfo擷取ApplicationInfo。
PackageItemInfo中有值
| public int |
icon |
: A drawable resource identifier (in the package's resources) of this component's icon. |
| public int |
labelRes |
: A string resource identifier (in the package's resources) of this component's label. |
是int型,基本用不上。
public String |
packageName |
: Name of the package that this item is in. |
這個是程式的包名,也就是說,可以在ApplicationInfo對象中得到安裝程式的圖片名字和包名。版本號碼和版本名只能在PackageInfo中獲得。ApplicationInfo與PackageInfo中都能得到包名!
程式名和圖片還可以通過PackageManager類獲得,PackageManager有方法getApplicationIcon(String
packageName)和getApplicationIcon(ApplicationInfo
info)都可以獲得應用程式的圖片,getApplicationLabel(ApplicationInfo
info)方法可以獲得應用程式的名字。
下面這段代碼可以得到所有已安裝應用啟動程式的Activity的資訊,即Main Activity Info:
PackageManager pm = getPackageManager(); Intent filter = new Intent(Intent.ACTION_MAIN); filter.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo>list = pm.queryIntentActivities(filter, PackageManager.GET_RESOLVED_FILTER);
啟動手機裡的第1個程式:
ComponentName cn =new ComponentName(list.get(0).activityInfo.packageName, list.get(0).activityInfo.name); Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); intent.setComponent(cn); startActivity(intent);