Как я могу динамически определить, является ли мое приложение системным или нормальным?
Как отличить системное приложение от обычного? Я смотрел через андроид 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;
Я вижу исчерпывающий ответ Панкаджа Кумара в этой SO-ссылке: " Как мне проверить, является ли приложение несистемным приложением в Android?" ИЛИ в этом его блоге: " http://pankajchunchun.wordpress.com/2014 / 07/08 / как проверить, "если приложение является системой, то приложение или не подписано подписью /".
Для начала, вы не можете удалить системное приложение, но вы можете удалить обычное приложение, используя "Настройки> Приложения> Управление приложениями".
Простая функция:
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
}
}