2011-05-28 159 views
14

嗨我想獲得用戶設備上所有已安裝的應用程序的列表我一直在搜索最長的時間,但無法找到我想要的這個鏈接是最接近的雖然和工程好,除了我是新的不明白如何使用方法getPackages();並創建一個列表與它獲取已安裝的Android應用程序的列表

http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

如何創建實際的名單將是一個重大的幫助,我有所有的代碼已經在短短不能得到列表中的任何幫助,以實際顯示感謝您的幫助

+0

很多東西,但沒有沒有強制關閉或給我的錯誤方法顯然返回一個數組列表,但是對於這個新來說,我不知道如何在列表視圖中顯示列表視圖 – user577732 2011-05-28 23:57:17

回答

57

我最近在做這樣的事情。我要說的一件事是確保在一個單獨的線程中執行此操作 - 查詢應用程序信息是SLOW。以下將爲您列出所有已安裝的應用程序。這將包括大量的系統的應用程序,你可能不感興趣的內容。

PackageManager pm = getPackageManager(); 
List<ApplicationInfo> apps = pm.getInstalledApplications(0); 

要限制它只是在用戶安裝或更新系統應用程序(如地圖,Gmail等),我用下面的邏輯:

List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>(); 

for(ApplicationInfo app : apps) { 
    //checks for flags; if flagged, check if updated system app 
    if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { 
     installedApps.add(app); 
    //it's a system app, not interested 
    } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
     //Discard this one 
    //in this case, it should be a user-installed app 
    } else { 
     installedApps.add(app); 
    } 
} 

編輯:另外,獲得的名稱和圖標的應用程序(這可能是什麼花的時間最長 - 我沒有做它的任何真正的深度檢測 - 使用此:

String label = (String)pm.getApplicationLabel(app); 
Drawable icon = pm.getApplicationIcon(app); 

insta lledApps現在應該有你需要的應用程序的完整列表。希望這會有所幫助,但是您可能需要修改邏輯,具體取決於您需要返回的應用程序。再一次,它很慢,但它只是你必須解決的問題。如果您經常訪問的內容可能需要在數據庫中構建數據緩存。

+0

不,我主要對系統應用程序感興趣,實際上我只寫根應用程序,所以現在要看看這個,謝謝 – user577732 2011-05-29 03:04:34

+0

考慮使用適配器。它將使列表滾動choppier,但會立即加載,無論列表有多大。 – tacone 2011-12-29 02:54:22

+0

我想訪問當前正在運行的進程(分別爲用戶安裝的應用程序和系統應用程序)。你能幫我麼? – 2013-04-21 06:43:59

相關問題