簡體   English   中英

獲取Android設備上已安裝的應用程序數量?

[英]Get number of installed apps on an Android device?

我正在制作一個Android啟動器,作為自己制作Android應用程序的介紹,而我的部分設計要求我知道用戶設備上安裝了多少應用程序,並且最好僅統計那些可以啟動的普通應用程序。 我希望將此數量的應用程序存儲在全局整數變量中。 僅考慮此目標,將數字作為該變量檢索的最簡單方法是什么?

您可以使用PackageManagergetInstalledApplications()方法。

文檔中

返回設備上安裝的所有應用程序包的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++;
    }
}

所有非系統應用程序都有啟動意圖,因此您只需要獲取所有應用程序列表並檢查其中有多少具有啟動意圖,否則該應用程序將成為系統應用程序。包管理器可以輕松檢索它,然后我們在尋找可用啟動意圖的同時瀏覽所有應用程序的信息。

正如Darshan Patel所建議 @Brad Larson♦

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
    }
}

如果要查找在給定設備上安裝的非系統應用程序,則可以執行以下操作:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM