Любой способ проверить, является ли запущенный процесс системным процессом в Android - PullRequest
3 голосов
/ 24 января 2012

Я создаю приложение для Android, в котором мне нужно показать список запущенных в данный момент приложений, но оно содержит весь процесс, включая многие системные или дефолтные процессы Android, такие как: launcher, dailer и т. Д.

Теперь есть ли способ проверить, не является ли текущий запущенный процесс системным процессом (процессом по умолчанию) Android.

Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 12 февраля 2013

Вот мой код: сначала, чтобы получить список запущенных приложений, выполните следующие действия:

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

Надеюсь, это поможет.

3 голосов
/ 24 января 2012

Согласно этой документации кажется, что вы можете использовать FLAG_SYSTEM_PROCESS, чтобы идентифицировать процесс как системный процесс или нет.Вот ТАКОЕ обсуждение этого .

0 голосов
/ 24 января 2012

Вы можете использовать ActivtyManager, чтобы получить список всех запущенных процессов в Android. Для получения дополнительной информации см. Ссылку ниже Убийца процессов Android .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...