2011-04-01 168 views
9

如何獲取Android手機上已安裝的第三方應用程序的列表。已安裝的應用程序是否爲第三方

我可以通過下面的代碼獲得應用程序列表,但我只想要第三方應用程序。

PackageManager pm = context.getPackageManager(); 
appInstalModel.setAppName(p.applicationInfo.loadLabel(context.getPackageManager()).toString()); 
appInstalModel.setAppPkg(p.packageName); 
appInstalModel.setAppVersionName(p.versionName); 
+0

你說的第三方是什麼意思?不是來自Google?不是從你? – RoflcoptrException 2011-04-01 14:47:46

+0

@Roflcoptr安裝到系統上或由用戶安裝。 – 2011-04-01 14:51:25

回答

7
List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); 
    for (int i=0; i < apps.size(); i++) 
    { 
     if ((apps.get(i).flags & ApplicationInfo.FLAG_SYSTEM) == 1) 
     { 
      //System app 
     } 
    } 
+1

我認爲它應該是這樣的。 if((apps.get(i).applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)== 1) { // System app } – 2011-04-02 12:54:04

2

ApplicationInfo對象將具有FLAG_SYSTEM標誌未設置。 sdmove程序可能有一些示例代碼。

+0

完美。我必須研究它。 – 2011-04-01 15:08:37

+0

我如何克隆sdmove項目? – 2011-04-01 15:10:44

2

@Roflcoptr答案的小變化。

List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); 
for (int i=0; i < apps.size(); i++) 
{ 
    if ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) 
    { 
     //System app 
    } 
} 

感謝@Roflcoptr爲您的答案。

+3

我強烈建議從'(XXX&ApplicationInfo.FLAG_SYSTEM)== 1) '(XXX&ApplicationInfo.FLAG_SYSTEM)!= 0)'或'(XXX&ApplicationInfo.FLAG_SYSTEM == ApplicationInfo.FLAG_SYSTEM)'。 1僅適用於FLAG_SYSTEM恰好爲1,但這是一個硬編碼值。 – 2012-11-16 22:37:34

7

RoflcoptrException的答案是正確的。但在某些情況下,它不會爲您提供所有已安裝的第三方應用程序。 ApplicationInfo也有標誌FLAG_UPDATED_SYSTEM_APP被設置

如果該應用已經作爲更新安裝到內置系統 應用

在我的智能手機這樣的應用包括女將點燃,Adobe Reader中, Slacker電臺等。這些應用程序沒有隨電話一起提供,而是從Google Play商店安裝的。因此,他們可以被視爲第三方應用程序。

因此,您可能還想檢查FLAG_UPDATED_SYSTEM_APP標誌。

final PackageManager packageManager = _context.getPackageManager(); 
List<ApplicationInfo> installedApplications = 
    packageManager.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo appInfo : installedApplications) 
{ 
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) 
    { 
     // IS A SYSTEM APP 
    } 

    if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) 
    { 
     // APP WAS INSTALL AS AN UPDATE TO A BUILD-IN SYSTEM APP 
    } 
} 
0
public static List<PackageInfo> getInstalledAppList(Context context) { 
     ArrayList<PackageInfo> packList = (ArrayList<PackageInfo>) context.getPackageManager().getInstalledPackages(0); 
     showLog("/n/n ********************** App List ********************"); 
     for (int i = 0; i < packList.size(); i++) { 

      PackageInfo packInfo = packList.get(i); 
      if ((packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { 
       String appName = packInfo.applicationInfo.loadLabel(context.getPackageManager()).toString(); 
       showLog(appName + "(" + packInfo.packageName + ")"); 
      } else { 
       packList.remove(i); 
       i--; 
      } 
     } 

     showLog("List Size : " + packList.size()); 
     showLog("/n/n ********************** END ********************"); 
     return packList; 
    } 
相關問題