如何在android中区分具有相同名称的应用程序?

时间:2012-05-16 06:38:50

标签: android

在android中我列出已安装的应用程序列表并存储在我的私有数据库中。在某些应用程序具有相同名称的情况下,示例中有4个名为Maps的应用程序,如果一个应用程序获得更新,则私有数据库中的其他3个应用程序记如何区分这些应用程序?我使用以下代码来获取已安装的应用程序列表。

PackageManager pm = this.getPackageManager();
    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> list = pm.queryIntentActivities(intent,
            PackageManager.PERMISSION_GRANTED);
    ArrayList<String> applist = new ArrayList<String>();
    ArrayList<String> packlist = new ArrayList<String>();

    for (ResolveInfo rInfo : list) {
        packlist.add(rInfo.activityInfo.packageName);
        applist.add(rInfo.activityInfo.applicationInfo.loadLabel(pm)
                .toString());
    }

3 个答案:

答案 0 :(得分:0)

使用安装路径作为唯一标识符(它们不会安装在同一个目录中)。

另一方面,如果您有时间,请阅读this文章。包的配置包含UID。该链接来自this回答。

答案 1 :(得分:0)

您不应该按名称区分两个应用程序。某些应用程序甚至没有与它们相关联的名称(即它们是空的)。区分两个应用程序的唯一可靠方法是使用它们的包名(OS也大量使用它)。

另请注意,虽然程序包名称始终相同,但如果完全卸载应用程序并再次重新安装,则应用程序的UID可能会更改。

答案 2 :(得分:0)

我想补充一点这里没有提到的澄清。

虽然不能有两个具有相同包名称的应用,但是一个应用中可以有多个启动器活动,用户可以在启动器应用中看到这些活动。是的,正如您所注意到的,标准的“地图”应用程序(“com.google.android.apps.maps”包)有几个启动器活动,如“本地”,“导航”,“地图”。如果这些“应用程序”(或开发人员的活动)在一个应用程序包中实现,则对用户无关紧要。

活动名称(“com.google.android.maps.MapsActivity”,您可以通过rInfo.activityInfo.name检索此字符串)也不是唯一的,因为任何人都可以创建一个具有唯一包名称和活动的应用程序在java包com.google.android.maps中称为MapsActivity。

因此,如果要查找所有这些启动器活动的唯一标识符,则应使用应用包名称(“com.google.android.apps.maps”)和活动名称(“com.google.android”的组合.maps.MapsActivity“)。