如何动态检测我的应用程序是系统还是正常?

时间:2011-05-18 11:01:54

标签: android

如何区分系统应用和普通应用?我查看了android PackageManager并找不到任何内容。

修改:我希望通过代码进行区分。

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

5 个答案:

答案 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;