2016-08-19 95 views
5

我在做一個Android啓動作一介紹,以使爲自己的Android應用程序,而我設計的一部分,需要我知道有許多應用程序都安裝在用戶的設備上,並最好只計算這是正常的應用程序,可以將那些被啓動。我希望將這些數量的應用程序存儲在全局變量中。只考慮這個目標,將這個數字作爲變量檢索的最簡單方法是什麼?獲取Android設備上已安裝應用的數量?

回答

2

你可以使用的PackageManagergetInstalledApplications()方法。

documentation

返回已安裝的 設備上的所有應用程序包的List。如果標誌GET_UNINSTALLED_PACKAGES已定,將返回的所有 應用,包括那些DONT_DELETE_DATA(部分 安裝了數據目錄的應用程序)刪除列表。

像這樣的東西應該工作:

int numberOfInstalledApps = getPackageManager(0).getInstalledApplications().size(); 

要過濾系統的應用程序,你可以做這樣的事情:

int numberOfNonSystemApps = 0; 

List<ApplicationInfo> appList = getPackageManager().getInstalledApplications(0); 
for(ApplicationInfo info : appList) { 
    if((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { 
     numberOfNonSystemApps++; 
    } 
} 
+0

太感謝你了,這正是擔任我需要和它的第一件事,我發現它實際上做的工作。這是我可以在互聯網上看到的這個問題的最簡單的解決方案。 – MSC

+0

不客氣:) – earthw0rmjim

2

的所有非系統應用程序都有一個啓動意圖使你只需要獲取所有應用程序的列表,並檢查其中有多少人具有啓動意圖,或者如果沒有,那麼該應用程序將是一個系統應用程序。所有應用程序的列表可以很容易地被包管理器檢索,然後我們通過的信息所有的應用程序,同時尋找可用的發射意圖。

至於建議by Darshan Patel @Brad拉爾森♦

PackageManager pm = getPackageManager(); 
int nonSysAppsCount=0; 
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 
for(ApplicationInfo packageInfo:packages){ 
    if(pm.getLaunchIntentForPackage(packageInfo.packageName) != null){ 
       String currAppName = pm.getApplicationLabel(packageInfo).toString(); 
      nonSysAppsCount++; 
       //This app is a non-system app 
    } 
    else{ 
     //System App 
    } 
} 
1

如果您正在尋找安裝了這個設備上的非系統應用程序,你可以做到以下幾點:

public static ArrayList<String> getInstalledApps() { 
    ArrayList<String> appList = new ArrayList<>(); 
    List<PackageInfo> packList = getPackageManager().getInstalledPackages(0); 
    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(getPackageManager()).toString(); 
      appList.add(appName); 
      Log.e("App >" + Integer.toString(i), appName); 
     } 
    } 
    return appList; 
} 

所以,你可以將列表做:

int number = getInstalledApps().size(); 

此外,您可以通過調用啓動任何應用程序:

Intent myIntent = new Intent(Intent.ACTION_MAIN, null); 
myIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
List appsList = context.getPackageManager().queryIntentActivities(myIntent, 0); 
相關問題