2012-05-16 40 views
1

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

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()); 
    } 
+0

它们应该通过软件包名称进行更新。 – keyser

+1

获取应用程序的UID。 – L7ColWinters

回答

0

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

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

0

您不应该通过名称区分两个应用程序。一些应用程序甚至没有与它们关联的名称(即它们是空的)。区分两个应用程序的唯一方法是使用它们的软件包名称(并且这也很受OS的使用)。

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

+0

谢谢,我已经检查过了,那些应用程序的包名和uid也是一样的。 – pushpa

+0

我怀疑是我误解了某些东西,或者你检查了错误的东西。无法安装具有相同应用程序包名称的两个应用程序。 – inazaruk

+0

在我的三星Galaxy Y设备中,我有应用程序地图,导航,地点。所有3个都具有相同的包名com.google.android.apps和相同的标签Called Maps。我已使用此代码来获取已安装的应用程序。 – pushpa

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“)。

相关问题