我如何区分系统应用和普通应用?我查看了Android的PackageManager
,但没有找到相关信息。
编辑:我想通过代码来区分。
if(system app) {
//do something
}
else{
//do nothing
}
我如何区分系统应用和普通应用?我查看了Android的PackageManager
,但没有找到相关信息。
编辑:我想通过代码来区分。
if(system app) {
//do something
}
else{
//do nothing
}
你可以尝试使用ApplicationInfo类(android.content.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
}
}
PackageManager
没有任何关系。 - slinden77
Application.FLAG_SYSTEM
的行为,但某些应用程序可以选择不安装在系统映像上(例如在SD卡上),因此不适用。请参见http://developer.android.com/reference/android/content/pm/ApplicationInfo.html#FLAG_SYSTEM。 - Phil