2016-08-19 103 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); 
相关问题