我正在构建一个Android应用程序,其中我需要显示当前正在运行的应用程序列表,但它包含所有进程,包括许多系统或defualt进程的android如:launcher,dailer等。
现在有办法检查当前正在运行的进程是不是android的系统进程(默认进程)。
非常感谢。
答案 0 :(得分:5)
这是我的代码: 首先获取正在运行的应用程序列表,请执行以下操作
public void RunningApps() {
final PackageManager pm = getPackageManager();
//Get the Activity Manager Object
ActivityManager aManager =
(ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
//Get the list of running Applications
List<ActivityManager.RunningAppProcessInfo> rapInfoList =
aManager.getRunningAppProcesses();
//Iterate all running apps to get their details
for (ActivityManager.RunningAppProcessInfo rapInfo : rapInfoList) {
//error getting package name for this process so move on
if (rapInfo.pkgList.length == 0)
continue;
try {
PackageInfo pkgInfo = pm.getPackageInfo(rapInfo.pkgList[0],
PackageManager.GET_ACTIVITIES);
if (isSystemPackage(pkgInfo)) {
//do something here
}
else {
//do something here
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
Log.d(TAG, "NameNotFoundException :" + rapInfo.pkgList[0]);
}
}
}
检查正在运行的应用程序是否为系统应用程序并在以前的方法中使用的实际函数如下所示
/**
* Return whether the given PackgeInfo represents a system package or not.
* User-installed packages (Market or otherwise) should not be denoted as
* system packages.
*
* @param pkgInfo The Package info object
* @return Boolean value indicating if the application is system app
*/
private boolean isSystemPackage(PackageInfo pkgInfo) {
return (pkgInfo.applicationInfo.flags &
ApplicationInfo.FLAG_SYSTEM) != 0;
}
我希望它有所帮助。
答案 1 :(得分:3)
根据此documentation,您似乎可以使用FLAG_SYSTEM_PROCESS来识别进程是否为系统进程。以下是关于this的讨论。
答案 2 :(得分:0)
您可以使用ActivtyManager获取android中所有正在运行的进程的列表。有关详细信息,请参阅以下链接Android process killer。