2011-10-15 30 views
3

我工作TrafficStats阿比使用下面的代碼來獲取所有的Android應用程序如何唯一標識一個Android應用程序

for (ApplicationInfo info : packageManager.getInstalledApplications(0)) { 
int uid = info.uid; 
CharSequence AppName = packageManager.getApplicationLabel(info); 
String packageManager = packageManager.packageManager.getNameForUid(uid).split(":")[0];    } 

信息但當我登錄了三個變量。它給出了令人困惑的結果。它們都不是唯一的。對於相同的UID,許多應用程序在那裏,在同一個包的名字,許多應用程序there.See下面的日誌輸出

AppName is:Phone UID:1001 package: android.uid.phone 
AppName is:DM Command Service UID:1001 package: android.uid.phone 
AppName is:Dialer Storage UID:1001 package: android.uid.phone 
AppName is:SIM Toolkit UID:1001 package: android.uid.phone 

那麼,如何識別應用程序。

回答

5

Android使用包名稱來唯一標識應用程序。您正在輸出userId名稱而不是包名稱。如果你打印出包裝名稱,你應該看到有所不同。試試這個:

String packageName = info.packageName;

至於你所看到的,Android應用程序可以被配置爲共享相同的簽名和用戶ID。所有這些設置都在AndroidManifest.xml中設置。

例如,手機應用程序有此設置

package="com.android.phone" 
android:sharedUserId="android.uid.phone" 

和電話提供商有這個設置

package="com.android.providers.telephony" 
android:sharedUserId="android.uid.phone" 

注意,它們共享相同的sharedUserId。