首先我们来看一下PackageItemInfo,它是包含了一些信息的基类,它的直接子类有:ApplicationInfo、ComponentInfo、InstrumentationInfo、PermissionGroupInfo、PermissionInfo。它的间接子类有:ActivityInfo、ProviderInfo、ServiceInfo。这个类包含的信息对于所有包中项目是平等的。
PackageItemInfo
extends Object| java.lang.Object | |
| ↳ | android.content.pm.PackageItemInfo |
| Known Direct Subclasses |
| Known Indirect Subclasses |
ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的Androdimanifest.xml的<application>标签中收集到的。
ResolveInfo这个类是通过解析一个与IntentFilter相对应的intent得到的信息。它部分地对应于从AndroidManifest.xml的<intent>标签收集到的信息。
PackageManager这个类是用来返回各种的关联了当前已装入设备了的应用的包的信息。你可以通过getPacageManager来得到这个类。
ApplicationInfo与ResolveInfo比较:前者能够得到Icon、Label、meta-data、description。后者只能得到Icon、Label。
下面讲一下这几个类综合在一起的具体应用:
通过调用PackageManager的方法可以得到两种不同的信息:
首先要得到manager:
PackageManager manager = getPackageManager();
方法一:
List<ApplicationInfo> appList = manager.getInstalledApplications(PackageManager.GET.UNINSTALLED_PAKAGES);
它是通过解析AndroidManifest.xml的<application>标签中得到的,所以它能得到所有的app。
方法二:
Intent intent = new Intent(Intent.A CTION_MAIN,null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> appList = manager.queryIntentActivities(intent,0);
它是通过解析<Intent-filter>标签得到有
<action android:name=”android.intent.action.MAIN”/>
<action android:name=”android.intent.category.LAUNCHER”/>
这样的app,所以得到的要比第一种方法少(前者比它多那种service、previder等app)
| java.lang.Object | |
| ↳ | android.content.pm.PackageInfo |
| Fields | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| public ActivityInfo[] | activities | Array of all <activity> tags included under <application>, or null if there were none. | |||||||||
| public ApplicationInfo | 应用程序 | Information collected from the <application> tag, or null if there was none. | |||||||||
| public ConfigurationInfo[] | configPreferences | Application specified preferred configuration <uses-configuration> tags included under <manifest>, or null if there were none. | |||||||||
| public int[] | gids | All kernel group-IDs that have been assigned to this package. | |||||||||
| public InstrumentationInfo[] | instrumentation | Array of all <instrumentation> tags included under <manifest>, or null if there were none. | |||||||||
| public String | packageName 包名 | The name of this package. | |||||||||
| public PermissionInfo[] | permissions | Array of all <permission> tags included under <manifest>, or null if there were none. | |||||||||
| public ProviderInfo[] | providers | Array of all <provider> tags included under <application>, or null if there were none. | |||||||||
| public ActivityInfo[] | receivers | Array of all <receiver> tags included under <application>, or null if there were none. | |||||||||
| public FeatureInfo[] | reqFeatures | The features that this application has said it requires. | |||||||||
| public String[] | requestedPermissions | Array of all <uses-permission> tags included under <manifest>, or null if there were none. | |||||||||
| public ServiceInfo[] | services | Array of all <service> tags included under <application>, or null if there were none. | |||||||||
| public String | sharedUserId | The shared user ID name of this package, as specified by the <manifest> tag's sharedUserId attribute. | |||||||||
| public int | sharedUserLabel | The shared user ID label of this package, as specified by the <manifest> tag's sharedUserLabel attribute. | |||||||||
| public Signature[] | signatures | Array of all signatures read from the package file. | |||||||||
| public int | versionCode 版本号 | The version number of this package, as specified by the <manifest> tag's versionCode attribute. | |||||||||
| public String | versionName 版本名 | The version name of this package, as specified by the <manifest> tag's versionName attribute. | |||||||||
| java.lang.Object | ||
| ↳ | android.content.pm.PackageItemInfo | |
| ↳ | android.content.pm.ApplicationInfo | |
| public String | backupAgentName | Class implementing the Application's backup functionality. |
| public String | className | Class implementing the Application object. |
| public String | dataDir | Full path to a directory assigned to the package for its persistent data. |
| public int | descriptionRes | A style resource identifier (in the package's resources) of the description of an application. |
| public boolean | enabled | When false, indicates that all components within this application are considered disabled, regardless of their individually set enabled status. |
| public int | flags | Flags associated with the application. |
| public String | manageSpaceActivityName | Class implementing the Application's manage space functionality. |
| public String | permission | Optional name of a permission required to be able to access this application's components. |
| public String | processName | The name of the process this application should run in. |
| public String | publicSourceDir | Full path to the location of the publicly available parts of this package (i.e. |
| public String[] | sharedLibraryFiles | Paths to all shared libraries this application is linked against. |
| public String | sourceDir | Full path to the location of this package. |
| public int | targetSdkVersion | The minimum SDK version this application targets. |
| public String | taskAffinity | Default task affinity of all activities in this application. |
| public int | theme | A style resource identifier (in the package's resources) of the default visual theme of the application. |
| public int | uid | The kernel user-ID that has been assigned to this application; currently this is not a unique ID (multiple applications can have the same uid). |
| Public Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| int | describeContents()
Describe the kinds of special objects contained in this Parcelable's marshalled representation.
| ||||||||||
| void | dump(Printer pw, String prefix) | ||||||||||
| CharSequence | loadDescription(PackageManager pm)
Retrieve the textual description of the application.
| ||||||||||
| String | toString()
Returns a string containing a concise, human-readable description of this object.
| ||||||||||
| void | writeToParcel(Parcel dest, int parcelableFlags) | ||||||||||
|
Inherited Methods
| |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
From class android.content.pm.PackageItemInfo
| |||||||||||||||||||||||
PackageManager
extends Object| java.lang.Object | |
| ↳ | android.content.pm.PackageManager |
| Known Direct Subclasses |
| Public Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| abstract void | addPackageToPreferred(String packageName)
This method is deprecated. This function no longer does anything; it was an old approach to managing preferred activities, which has been superceeded (and conflicts with) the modern activity-based preferences.
| ||||||||||
| abstract boolean | addPermission(PermissionInfo info)
Add a new dynamic permission to the system.
| ||||||||||
| abstract boolean | addPermissionAsync(PermissionInfo info)
Like
addPermission(PermissionInfo) but asynchronously persists the package manager state after returning from the call, allowing it to return quicker and batch a series of adds at the expense of no guarantee the added permission will be retained if the device is rebooted before it is written.
| ||||||||||
| abstract void | addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity)
This method is deprecated. This is a protected API that should not have been available to third party applications. It is the platform's responsibility for assigning preferred activities and this can not be directly modified. Add a new preferred activity mapping to the system. This will be used to automatically select the given activity component when Context.startActivity() finds multiple matching activities and also matches the given filter.
| ||||||||||
| abstract String[] | canonicalToCurrentPackageNames(String[] names)
Map from a packages canonical name to the current name in use on the device.
| ||||||||||
| abstract int | checkPermission(String permName, String pkgName)
Check whether a particular package has been granted a particular permission.
| ||||||||||
| abstract int | checkSignatures(String pkg1, String pkg2)
Compare the signatures of two packages to determine if the same signature appears in both of them.
| ||||||||||
| abstract int | checkSignatures(int uid1, int uid2)
Like
checkSignatures(String, String), but takes UIDs of the two packages to be checked.
| ||||||||||
| abstract void | clearPackagePreferredActivities(String packageName)
Remove all preferred activity mappings, previously added with
addPreferredActivity(IntentFilter, int, ComponentName[], ComponentName), from the system whose activities are implemented in the given package name.
| ||||||||||
| abstract String[] | currentToCanonicalPackageNames(String[] names)
Map from the current package names in use on the device to whatever the current canonical name of that package is.
| ||||||||||
| abstract Drawable | getActivityIcon(Intent intent)
Retrieve the icon associated with an Intent.
| ||||||||||
| abstract Drawable | getActivityIcon(ComponentName activityName)
Retrieve the icon associated with an activity.
| ||||||||||
| abstract ActivityInfo | getActivityInfo(ComponentName className, int flags)
Retrieve all of the information we know about a particular activity class.
| ||||||||||
| abstract List<PermissionGroupInfo> | getAllPermissionGroups(int flags)
Retrieve all of the known permission groups in the system.
| ||||||||||
| abstract int | getApplicationEnabledSetting(String packageName)
Return the the enabled setting for an application.
| ||||||||||
| abstract Drawable | getApplicationIcon(String packageName)
Retrieve the icon associated with an application.
获取程序图标
| ||||||||||
| abstract Drawable | getApplicationIcon(ApplicationInfo info)
Retrieve the icon associated with an application.
| ||||||||||
| abstract ApplicationInfo | getApplicationInfo(String packageName, int flags)
Retrieve all of the information we know about a particular package/application.
| ||||||||||
| abstract CharSequence | getApplicationLabel(ApplicationInfo info)
Return the label to use for this application.
获取程序描述
| ||||||||||
| abstract int | getComponentEnabledSetting(ComponentName componentName)
Return the the enabled setting for a package component (activity, receiver, service, provider).
| ||||||||||
| abstract Drawable | getDefaultActivityIcon()
Return the generic icon for an activity that is used when no specific icon is defined.
| ||||||||||
| abstract Drawable | getDrawable(String packageName, int resid, ApplicationInfo appInfo)
Retrieve an image from a package.
| ||||||||||
| abstract List<ApplicationInfo> | getInstalledApplications(int flags)
Return a List of all application packages that are installed on the device.
获取所有已安装程序信息
| ||||||||||
| abstract List<PackageInfo> | getInstalledPackages(int flags)
Return a List of all packages that are installed on the device.
获取所有已安装 程序的包信息
| ||||||||||
| abstract String | getInstallerPackageName(String packageName)
Retrieve the package name of the application that installed a package.
| ||||||||||
| abstract InstrumentationInfo | getInstrumentationInfo(ComponentName className, int flags)
Retrieve all of the information we know about a particular instrumentation class.
| ||||||||||
| abstract Intent | getLaunchIntentForPackage(String packageName)
Return a "good" intent to launch a front-door activity in a package, for use for example to implement an "open" button when browsing through packages.
| ||||||||||
| abstract String | getNameForUid(int uid)
Retrieve the official name associated with a user id.
| ||||||||||
| PackageInfo | getPackageArchiveInfo(String archiveFilePath, int flags)
Retrieve overall information about an application package defined in a package archive file
| ||||||||||
| abstract int[] | getPackageGids(String packageName)
Return an array of all of the secondary group-ids that have been assigned to a package.
| ||||||||||
| abstract PackageInfo | getPackageInfo(String packageName, int flags)
Retrieve overall information about an application package that is installed on the system.
| ||||||||||
| abstract String[] | getPackagesForUid(int uid)
Retrieve the names of all packages that are associated with a particular user id.
| ||||||||||
| abstract PermissionGroupInfo | getPermissionGroupInfo(String name, int flags)
Retrieve all of the information we know about a particular group of permissions.
| ||||||||||
| abstract PermissionInfo | getPermissionInfo(String name, int flags)
Retrieve all of the information we know about a particular permission.
| ||||||||||
| abstract int | getPreferredActivities(List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName)
Retrieve all preferred activities, previously added with
addPreferredActivity(IntentFilter, int, ComponentName[], ComponentName), that are currently registered with the system.
| ||||||||||
| abstract List<PackageInfo> | getPreferredPackages(int flags)
Retrieve the list of all currently configured preferred packages.
| ||||||||||
| abstract ActivityInfo | getReceiverInfo(ComponentName className, int flags)
Retrieve all of the information we know about a particular receiver class.
| ||||||||||
| abstract Resources | getResourcesForActivity(ComponentName activityName)
Retrieve the resources associated with an activity.
| ||||||||||
| abstract Resources | getResourcesForApplication(ApplicationInfo app)
Retrieve the resources for an application.
| ||||||||||
| abstract Resources | getResourcesForApplication(String appPackageName)
Retrieve the resources associated with an application.
| ||||||||||
| abstract ServiceInfo | getServiceInfo(ComponentName className, int flags)
Retrieve all of the information we know about a particular service class.
| ||||||||||
| abstract FeatureInfo[] | getSystemAvailableFeatures()
Get a list of features that are available on the system.
| ||||||||||
| abstract String[] | getSystemSharedLibraryNames()
Get a list of shared libraries that are available on the system.
| ||||||||||
| abstract CharSequence | getText(String packageName, int resid, ApplicationInfo appInfo)
Retrieve text from a package.
| ||||||||||
| abstract XmlResourceParser | getXml(String packageName, int resid, ApplicationInfo appInfo)
Retrieve an XML file from a package.
| ||||||||||
| abstract boolean | hasSystemFeature(String name)
Check whether the given feature name is one of the available features as returned by
getSystemAvailableFeatures().
| ||||||||||
| abstract boolean | isSafeMode()
Return whether the device has been booted into safe mode.
| ||||||||||
| abstract List<ResolveInfo> | queryBroadcastReceivers(Intent intent, int flags)
Retrieve all receivers that can handle a broadcast of the given intent.
| ||||||||||
| abstract List<ProviderInfo> | queryContentProviders(String processName, int uid, int flags)
Retrieve content provider information.
| ||||||||||
| abstract List<InstrumentationInfo> | queryInstrumentation(String targetPackage, int flags)
Retrieve information about available instrumentation code.
| ||||||||||
| abstract List<ResolveInfo> | queryIntentActivities(Intent intent, int flags)
Retrieve all activities that can be performed for the given intent.
| ||||||||||
| abstract List<ResolveInfo> | queryIntentActivityOptions(ComponentName caller, Intent[] specifics, Intent intent, int flags)
Retrieve a set of activities that should be presented to the user as similar options.
| ||||||||||
| abstract List<ResolveInfo> | queryIntentServices(Intent intent, int flags)
Retrieve all services that can match the given intent.
| ||||||||||
| abstract List<PermissionInfo> | queryPermissionsByGroup(String group, int flags)
Query for all of the permissions associated with a particular group.
| ||||||||||
| abstract void | removePackageFromPreferred(String packageName)
This method is deprecated. This function no longer does anything; it was an old approach to managing preferred activities, which has been superceeded (and conflicts with) the modern activity-based preferences.
| ||||||||||
| abstract void | removePermission(String name)
Removes a permission that was previously added with
addPermission(PermissionInfo).
| ||||||||||
| abstract ResolveInfo | resolveActivity(Intent intent, int flags)
Determine the best action to perform for a given Intent.
| ||||||||||
| abstract ProviderInfo | resolveContentProvider(String name, int flags)
Find a single content provider by its base path name.
| ||||||||||
| abstract ResolveInfo | resolveService(Intent intent, int flags)
Determine the best service to handle for a given Intent.
| ||||||||||
| abstract void | setApplicationEnabledSetting(String packageName, int newState, int flags)
Set the enabled setting for an application This setting will override any enabled state which may have been set by the application in its manifest.
| ||||||||||
| abstract void | setComponentEnabledSetting(ComponentName componentName, int newState, int flags)
Set the enabled setting for a package component (activity, receiver, service, provider).
| ||||||||||
FROM:http://www.androidsnippets.org/snippets/70/
- 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;
- }
获取未安装的APK信息
- /** 获取未安装的APK信息
- * @param context
- * @param archiveFilePath APK文件的路径。如:/sdcard/download/XX.apk
- */
- public void getUninatllApkInfo(Context context, String archiveFilePath){
- PackageManager pm = context.getPackageManager();
- PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);
- if(info != null){
- ApplicationInfo appInfo = info.applicationInfo;
- String appName = pm.getApplicationLabel(appInfo).toString();
- String packageName = appInfo.packageName;
- Drawable icon = pm.getApplicationIcon(appInfo);
- }
- }
据测试:无法获取未安装APK的图片。
本文深入介绍了Android中的Package Manager,包括其基本概念、核心类如PackageItemInfo及其子类的使用,以及如何通过PackageManager获取已安装应用的信息。同时,还提供了一些示例代码,帮助开发者更好地理解和使用这些类。
3162

被折叠的 条评论
为什么被折叠?



