目录:
1、查看APP中所有应用的包名
2、查询可跳转的Activity们
3、启动另一个App
Android小仙
参考资料 : 关于PackageManager的用法详解
1 查看APP中所有应用的包名
- 获取
PackageManager
- 获取
PackageManager pm = this.getPackageManager();
- 获取所有的
ApplicationInfo
- 获取所有的
List<ApplicationInfo> appList = pm
.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
- 查看包名
ApplicationInfo.packageName
- 查看包名
-
ApplicationInfo
中的属性
类中有150行的代码
ApplicationInfo
是android.content.pm
包下的一个实体类,用于封装应用的信息
-
2、查询可跳转的Activity们
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED|Intent.FLAG_ACTIVITY_NEW_TASK);
List<ResolveInfo> list = pm.queryIntentActivities(intent,
PackageManager.GET_ACTIVITIES);
for (int i = 0; i < list.size(); i++) {
ResolveInfo info = list.get(i);
Log.d("MainActivity","activityName:"+ info.activityInfo.name);
}
3、通过包名启动另一个APP的方法
private static Intent getAppOpenIntentByPackageName(Context context,String packageName){
//Activity完整名
String mainAct = null;
//根据包名寻找
PackageManager pkgMag = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED|Intent.FLAG_ACTIVITY_NEW_TASK);
List<ResolveInfo> list = pkgMag.queryIntentActivities(intent,
PackageManager.GET_ACTIVITIES);
for (int i = 0; i < list.size(); i++) {
ResolveInfo info = list.get(i);
if (info.activityInfo.packageName.equals(packageName)) {
mainAct = info.activityInfo.name;
break;
}
}
if (TextUtils.isEmpty(mainAct)) {
return null;
}
intent.setComponent(new ComponentName(packageName, mainAct));
return intent;
}
4、PackageManager的作用
- 安装,卸载应用
- 查询permission相关信息
- 查询Application相关信息(application,activity,receiver,service,provider及相应属性等)
- 查询已安装应用
- 增加,删除permission
- 清除用户数据、缓存,代码段等
网友评论