android有很多服务管理类,如ActivityManager,PowerManager,AudioManager,RingtoneManager,AlarmManager,KeyguardManager,NotificationManager,SearchManager等等。
PackageMagager的功能:
安装卸载程序
搞版本该功能函数已经被废了。
查询application相关信息(包括application、activity、service、receive、provide、permission等及他们的属性)
List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags);
List<ProviderInfo> queryContentProviders(String processName, int uid, int flags);
List<InstrumentationInfo> queryInstrumentation(String targetPackage, int flags);
List<ResolveInfo> queryIntentActivities(Intent intent, int flags);
List<ResolveInfo> queryIntentActivityOptions(ComponentName caller, Intent[] specifics, Intent intent, int flags);
List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags);
List<ResolveInfo> queryIntentServices(Intent intent, int flags);
List<PermissionInfo> queryPermissionsByGroup(String group, int flags);
查询已安装应用
List<ApplicationInfo> getInstalledApplications(int falgs);
List<PackageInfo> getInstalledPackages(int falgs);
还有好多其他函数好多啊。
Launcher中allapps里面的图标可以用以下代码找出来:
PackageManager pm = this.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.GATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, PackageManager.SIGNATURE_MATCH);
Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator(pm)); //排个序
for(ResolveInfo reInfo : resolveInfos){
//想怎么处理就怎么处理
reInfo.LoadLabel(pm); //Label用来显示
reInfo.LoadIcon(pm); //Icon用来显示
reInfo.activityInfo.packageName;
reInfo.activityInfo.name; //上面包名+这个是类名用于启动程序
}
PackageInfo中的字段与manifest标签一一对应关系如下:
<manifest
package="" ==> public String packageName;
android:versionCode="" ==> public int versionCode;
android:versionName="" ==> public String versionName;
android:sharedUserId="" ==> public String sharedUserId;
android:sharedUserLabel="" ==> public int sharedUserLabel;(为什么ID是String类型,Label是Int类型?)
>
<application> ==> public ApplicationInfo applicationInfo;
<activity></activity> ==> public ActivityInfo[] activities;
<receivers></receivers> ==> public ActivityInfo[] receivers;
<services></services> ==> public ServiceInfo[] services;
<provider></provider> ==> public ProviderInfo[] providers;
</application>
<instrumentation></instrumentation> ==> public InstrumentationInfo[] instrumentation;
<permission></permission> ==> public PermissionInfo[] permissions;
<uses-permission></uses-permission> ==> public String[] requestedPermissions;
<uses-configuration></uses-configuration> ==> public ConfigurationInfo[] configPreferences;
</manifest>
到此结束,下面还有几个PackageInfo中的字段不在manifest中的:
public long firstInstallTime;(第一次安装时间)
public long lastUpdateTime;(最后一次更新时间)
public int[] gids;(kernel group-IDs)
public PeatureInfo[] reqFeatures;
public Signature[] signatures;