在Android设备上获取已安装应用的数量?

7

我正在制作一个Android启动器,作为自己制作Android应用程序的入门,并且我的设计需要我知道用户设备上安装了多少应用程序,并且最好只计算可以启动的普通应用程序。 我希望将这些应用程序数量存储在全局整数变量中。 只考虑这个目标,最简单的方式是什么,以便将此数字检索为该变量?

3个回答

4
你可以使用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++;
    }
}

非常感谢,这正是我所需要的,并且这是我找到的第一件真正有效的东西。这是我在互联网上看到的最简单的解决方案。 - MSC

3
所有非系统应用程序都有一个启动意图,因此您只需要获取所有应用程序的列表并检查其中有多少个具有启动意图,或者如果没有,则该应用程序将是系统应用程序。可以通过包管理器轻松检索所有应用程序的列表,然后在查找可用启动意图的同时浏览所有应用程序的信息。
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
    }
}

2
如果您想查找安装在特定设备上的非系统应用程序,可以执行以下操作:
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接