确定供应商预装了android包

时间:2011-09-07 09:41:20

标签: android

我想知道是否有办法知道我的应用程序是由供应商预装的(而不是从Android Market安装)。应用程序也可以在Android Market中使用,并可以从那里更新。

一种解决方案是在本地文件系统中创建一个文件(我们可以为供应商构建一个特殊的应用程序版本)。但是有一种情况是应用程序可以在首次运行之前从市场更新,并且不会创建文件。

还有其他方法吗?可能是安装路径?

同样有趣的是,Android Market应用程序是否会自动检查此预装应用程序的更新,就像它为Google地图执行的一样。

2 个答案:

答案 0 :(得分:5)

您必须获取包的ApplicationInfo(使用PackageManager),然后检查其标志。

import android.content.pm.ApplicationInfo;

if ((ApplicationInfo.FLAG_SYSTEM & myApplicationInfo.flags) != 0)
   // It is a pre embedded application on the device.

答案 1 :(得分:3)

有关更完整的示例,可以使用此:

private String getAllPreInstalledApplications() {

        String allPreInstalledApplications = "";

        PackageManager pm = getPackageManager();
        List<ApplicationInfo> installedApplications = pm
                .getInstalledApplications(PackageManager.GET_META_DATA);

        for (ApplicationInfo applicationInfo : installedApplications) {
            if (isApplicationPreInstalled(applicationInfo)) {
                allPreInstalledApplications += applicationInfo.processName + "\n";
            }
        }

        return allPreInstalledApplications;
}
private static boolean isApplicationPreInstalled(ApplicationInfo applicationInfo) {
    if (applicationInfo != null) {
        int allTheFlagsInHex = Integer.valueOf(
                String.valueOf(applicationInfo.flags), 16);
        /*
         If flags is an uneven number, then it
         is a preinstalled application, because in that case
         ApplicationInfo.FLAG_SYSTEM ( == 0x00000001 )
         is added to flags
          */
        if ((allTheFlagsInHex % 2) != 0) {
            return true;
        }
    }
    return false;
}