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

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

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

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

5 ответов

Решение

Вы можете попробовать использовать флаги, доступные в классе 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?
    }
}

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

boolean isSystemApp = (getApplicationInfo().flags
  & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0;

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

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

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
    }
}
Другие вопросы по тегам