如何区分系统应用和普通应用?我查看了android PackageManager
并找不到任何内容。
修改:我希望通过代码进行区分。
if(system app) {
//do something
}
else{
//do nothing
}
答案 0 :(得分:15)
您可以尝试使用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?
}
}
答案 1 :(得分:11)
忘记PackageManager!您只询问了自己的应用程序。在Activity#onCreate(Bundle)中,你可以调用getApplicationInfo()并像这样测试它的标志:
boolean isSystemApp = (getApplicationInfo().flags
& (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0;
答案 2 :(得分:0)
对于初学者,您无法卸载系统应用,但可以使用“设置&gt;应用程序&gt;管理应用程序”卸载普通应用。
答案 3 :(得分: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
}
}
答案 4 :(得分:0)
Pankaj Kumar在这个SO链接中看到了一个全面的答案: &#34; How do I check if an app is a non-system app in Android?&#34; 或者在他的博客中: &#34; http://pankajchunchun.wordpress.com/2014/07/08/how-to-check-if-application-is-system-app-or-not-by-signed-signature/&#34;