有什么方法可以检查一个正在运行的进程是否是Android中的系统进程吗

gg0vcinb  于 2023-03-28  发布在  Android
关注(0)|答案(4)|浏览(169)

我正在构建一个Android应用程序,其中我需要显示当前运行的应用程序的列表,但它包含所有的过程,包括许多系统或Android的defualt过程,如:发射器、日报器等
现在是否有任何方法来检查当前运行的进程是否不是Android的系统进程(默认进程)。
多谢了。

egmofgnx

egmofgnx1#

下面是我的代码:首先要获取正在运行的应用程序列表,请执行以下操作

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;
    }

希望能有所帮助。

vuv7lop3

vuv7lop32#

根据这个documentation,似乎你可以使用FLAG_SYSTEM_PROCESS来识别一个进程是否是系统进程。这里是关于this的讨论。

gopyfrb3

gopyfrb33#

您可以使用ActivtyManager来获取Android中所有运行进程的列表。请参阅下面的链接以获取更多信息Android process killer

5rgfhyps

5rgfhyps4#

public static boolean isAppRunning(Context context, String packageName) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
    if (list.size() <= 0) {
      return false;
    }
    for (ActivityManager.RunningTaskInfo info : list) {
      if (info.baseActivity.getPackageName().equals(packageName)) {
        return true;
      }
    }
    return false;
}

相关问题