2012-05-16 39 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「)。

相關問題