getPackageManager()。getInstalledPackages(PackageManager.GET_ACTIVITIES)返回null

时间:2011-09-10 21:04:19

标签: android installed-applications android-package-managers

如果我打电话

    PackageManager pm = getPackageManager () ;
    List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_PROVIDERS) ;

我得到一个已安装软件包的列表,包括他们声明的任何提供者(即,pis [i] .providers可能是非null)。

但是,如果我在标志中包含PackageManager.GET_ACITIVITIES,如

    PackageManager pm = getPackageManager () ;
    List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_ACTIVITIES | PackageManager.GET_PROVIDERS) ;

我希望获得已安装软件包的“相同”列表,但pis [i] .activities也是非空的。但我没有,我得到一个空列表。

documentation中没有提及的标志中包含PackageManager.GET_ACTIVITES有什么特别之处吗?

我目前的工作是将PackageManager.GET_ACTIVITIES从标志中删除,然后循环返回列表,如下所示:

    for (PackageInfo pi : pis) {
        try {
            PackageInfo tmp = pm.getPackageInfo (pi.packageName, PackageManager.GET_ACTIVITIES) ;
            pi.activities = tmp.activities ;
            }
        catch (NameNotFoundException e) {
            Log.e (TAG, e.getMessage ()) ;
            }

但这似乎是一个真正的克服。

我唯一能提到的getInstalledPackages(PackageManager.GET_ACTIVITIES)返回一个空列表是here,但在这种情况下的问题似乎是在主应用程序线程外调用getInstalledPackages()的问题不是我的情况。

P.S。这是姜饼的.602 VZW版本,如果重要的话

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题并找到了更好的解决方法:

public void listAllActivities() throws NameNotFoundException
{
    List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
    for(PackageInfo pack : packages)
    {
        ActivityInfo[] activityInfo = getPackageManager().getPackageInfo(pack.packageName, PackageManager.GET_ACTIVITIES).activities;
        Log.i("Pranay", pack.packageName + " has total " + ((activityInfo==null)?0:activityInfo.length) + " activities");
        if(activityInfo!=null)
        {
            for(int i=0; i<activityInfo.length; i++)
            {
                Log.i("PC", pack.packageName + " ::: " + activityInfo[i].name);
            }
        }
    }
}

请注意,我需要两次查询PackageManager。使用getPackageManager().getInstalledPackages(...)后再次使用getPackageManager().getPackageInfo(...)

我希望它有所帮助。