Как я могу динамически определить, является ли мое приложение системным или нормальным? - PullRequest
10 голосов
/ 18 мая 2011

Как отличить системное приложение от обычного?Я посмотрел через Android PackageManager и не смог найти.

Редактировать: Я хочу дифференцировать с помощью кода.

if(system app) {
  //do something
}
else{
   //do nothing
}

Ответы [ 5 ]

15 голосов
/ 18 мая 2011

Вы можете попробовать использовать флаги, доступные в классе ApplicationInfo (android.conent.pm).Например:

...
PackageManager pm = getPackageManager();
List<ApplicationInfo> installedApps = pm.getInstalledApplications(0);

for (ApplicationInfo ai: installedApps) {

    if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
        // System app - do something here
        ...
    } else {
        // User installed app?
    }
}
11 голосов
/ 30 июня 2013

Забудь PackageManager! Вы спрашивали только о своем заявлении. В вашем Activity # onCreate (Bundle) вы можете просто вызвать getApplicationInfo () и проверить его флаги следующим образом:

boolean isSystemApp = (getApplicationInfo().flags
  & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0;
0 голосов
/ 14 августа 2014
0 голосов
/ 23 февраля 2014

Простая функция:

public boolean isUserApp(ApplicationInfo ai,boolean getUpdatedSystemApps){      
    if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
        if(getUpdatedSystemApps==true){
            if((ai.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0){
                return true;
            } else {
                return false;
            }                  
        }
        return false;
    } else {
        return true;
    }
}

Вы можете использовать вышеуказанную функцию как:

PackageManager pm = getPackageManager();
List<ApplicationInfo> allApps = pm.getInstalledApplications(0);

for (ApplicationInfo ai: allApps) {

    if (isUserApp(ai,true)) {
        // User app or Updated SystemApp - do something here
        ...
    } else {
        // System app
    }
}
0 голосов
/ 18 мая 2011

Для начала вы не можете удалить системное приложение, но вы можете удалить обычное приложение, используя «Настройки> Приложения> Управление приложениями».

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