getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES)返回null [英] getPackageManager ().getInstalledPackages (PackageManager.GET_ACTIVITIES) returns null

查看:1869
本文介绍了getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES)返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我称之为

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

我得到安装包的列表,包括他们宣称任何provivders(即与督察[I] .providers可能是非空)。

I get a list of installed packages, including any provivders they declare (i.e, with pis[i].providers possibly being non-null).

不过,如果我有间的标志PackageManager.GET_ACITIVITIES,如

However, if I include PackageManager.GET_ACITIVITIES among the flags, as in

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

我希望得到已安装的软件包的相同的名单,但与督察[I] .activities是非空为好。但我不这样做,我得到一个空列表。

I expect to get the "same" list of installed packages, but with pis[i].activities being non-null as well. But I don't, I get an empty list.

有什么特别之处其中包括标志PackageManager.GET_ACTIVITES未提及的<一href="http://developer.android.com/reference/android/content/pm/PackageManager.html#getInstalledApplications(int)">documentation?

Is there something special about including PackageManager.GET_ACTIVITES among the flags that isn't mention in the documentation?

我目前的解决办法是离开PackageManager.GET_ACTIVITIES出来的标志,然后通过返回的列表循环,如下所示:

My current work around is to leave PackageManager.GET_ACTIVITIES out of the flags, then loop through the returned list as follows:

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

但是,这似乎是一个真正的杂牌。

But that seems like a real kludge.

,只有提起我能找到的getInstalledPackages(PackageManager.GET_ACTIVITIES)返回一个空列表<一个href="http://stackoverflow.com/questions/3455781/packagemanager-getinstalledpackages-returns-empty-list">here,但在这种情况下,这个问题似乎一直在一些关于调用getInstalledPackages()主应用程序线程之外,这是不是在我的案件的情况。

The only mention I could find of getInstalledPackages (PackageManager.GET_ACTIVITIES) returning an empty list is here, but the problem in that case seems to have been something about calling getInstalledPackages() outside the main application thread and that is not the situation in my case.

P.S。这是姜饼的0.602 VZW构建,以免重要

p.s. this is the .602 VZW build of Gingerbread, in case that matters

推荐答案

我遇到了同样的问题,并发现了一个更好的解决方法:

I came across the same issue and found out a better workaround:

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(...)

Notice that I need to query PackageManager twice. Once using getPackageManager().getInstalledPackages(...) and again using getPackageManager().getPackageInfo(...)

我希望它能帮助。

这篇关于getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES)返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆