/**
* 获取可有进程的数量
*
* @param context
* @return
*/
public static int getAllProcessNum(Context context) {
PackageManager packageManager = context.getPackageManager();
// 获取所有的应用信息 因为要获取四大组件信息 要添加flag
List<PackageInfo> installedPackages = packageManager
.getInstalledPackages(PackageManager.GET_ACTIVITIES
| PackageManager.GET_SERVICES
| PackageManager.GET_PROVIDERS
| PackageManager.GET_RECEIVERS);
// 用 HashSet 存放所有的进程名字 可以排除重复的
HashSet<String> set = new HashSet<String>();
for (PackageInfo packageInfo : installedPackages) {
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
// 进程名字 一般就是包名
String processName = applicationInfo.processName;
set.add(processName);
// 获取四大组件信息 分别遍历 获取进程名字
ActivityInfo[] activities = packageInfo.activities;
if (activities != null) {
for (ActivityInfo activityInfo : activities) {
// 进程名字
String processName1 = activityInfo.processName;
set.add(processName1);
}
}
ServiceInfo[] services = packageInfo.services;
if (services != null) {
for (ServiceInfo serviceInfo : services) {
// 进程名字
String processName2 = serviceInfo.processName;
set.add(processName2);
}
}
ProviderInfo[] providers = packageInfo.providers;
if (providers != null) {
for (ProviderInfo providerInfo : providers) {
// 进程名字
String processName3 = providerInfo.processName;
set.add(processName3);
}
}
ActivityInfo[] receivers = packageInfo.receivers;
if (receivers != null) {
for (ActivityInfo receiverInfo : receivers) {
// 进程名字
String processName4 = receiverInfo.processName;
set.add(processName4);
}
}
}
return set.size();
}