我最近在做這樣的事情。我要說的一件事是確保在一個單獨的線程中執行此操作 - 查詢應用程序信息是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現在應該有你需要的應用程序的完整列表。希望這會有所幫助,但是您可能需要修改邏輯,具體取決於您需要返回的應用程序。再一次,它很慢,但它只是你必須解決的問題。如果您經常訪問的內容可能需要在數據庫中構建數據緩存。
很多東西,但沒有沒有強制關閉或給我的錯誤方法顯然返回一個數組列表,但是對於這個新來說,我不知道如何在列表視圖中顯示列表視圖 – user577732 2011-05-28 23:57:17