【问题标题】:How to get installed package name in a list? [duplicate]如何在列表中获取已安装的包名称? [复制]
【发布时间】:2014-05-14 19:18:48
【问题描述】:

我是 android 新手。我必须使用以下代码检索所有已安装应用程序包名称的列表

    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",""+ activityInfo[i]);
                myList = new ArrayList();
                myList.add(pack.packageName);

            }
            aplist = new ArrayList<String>();
            aplist.add(pack.packageName);
            Toast.makeText(this, "list are      "+aplist, Toast.LENGTH_LONG).show();

        }


    }

但它在 diff toast 中获取包名。如何在一个列表中获取所有包名称??

【问题讨论】:

  • 不,它不重复:/
  • 你是什么意思`它在 diff toast 中获取包名。` ???
  • 我需要将所有包名作为列表获取

标签: android package


【解决方案1】:

以下帮助函数检索所有已安装的应用程序,包括应用程序名称、包名称、版本号和代码以及图标。 getPackages() 方法返回一个包含所有应用程序的 ArrayList。

class PkgInfo {
    private String appname = "";
    private String pname = "";
    private String versionName = "";
    private int versionCode = 0;
    private Drawable icon;
    private void prettyPrint() {
        Log.v(appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
    }
}

private ArrayList<PkgInfo> getPackages() {
    ArrayList<PkgInfo> apps = getInstalledApps(false); /* false = no system packages */
    final int max = apps.size();
    for (int i=0; i<max; i++) {
        apps.get(i).prettyPrint();
    }
    return apps;
}

private ArrayList<PkgInfo> getInstalledApps(boolean getSysPackages) {
    ArrayList<PkgInfo> res = new ArrayList<PkgInfo>();        
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
    for(int i=0;i<packs.size();i++) {
        PackageInfo p = packs.get(i);
        if ((!getSysPackages) && (p.versionName == null)) {
            continue ;
        }
        PkgInfo newInfo = new PkgInfo();
        newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();
        newInfo.pname = p.packageName;
        newInfo.versionName = p.versionName;
        newInfo.versionCode = p.versionCode;
        newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
        res.add(newInfo);
    }
    return res; 
}

希望对你有所帮助。

【讨论】:

  • 如何调用getInstalledApps函数
  • 就像ArrayList&lt;PkgInfo&gt; details=getInstalledApps(true) 一样,它将为您提供应用程序的所有详细信息,即应用程序名称、包名称、图标等。
  • 这不会从设备获取所有已安装的应用程序
【解决方案2】:

为什么要在每次迭代中初始化 apList 和 myList 变量? 看看下面的修改后的代码应该可以解决你的问题:

aplist = new ArrayList<String>();
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",""+ activityInfo[i]);

            if (myList != null)
                myList = new ArrayList();

            myList.add(pack.packageName);
        }

        aplist.add(pack.packageName);
    }
}
Toast.makeText(this, "list are      "+aplist, Toast.LENGTH_LONG).show();

【讨论】:

  • 空指针异常
  • @Maxwell 查看我的答案。
猜你喜欢
  • 2012-12-13
  • 2014-04-14
  • 2012-04-06
  • 1970-01-01
  • 2018-06-26
  • 2022-01-23
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多