从Android应用程序标签获取Android应用程序包名称?

时间:2016-08-21 12:54:17

标签: android android-package-managers

有没有办法使用应用名称获取包名?例如,如果我键入 whatsapp 并且应用程序已安装在设备上,那么它应该返回包名称,如 com.whatsapp

1 个答案:

答案 0 :(得分:2)

试试这个

    public static void installedApps()
{
    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();
            Log.e("App № " + Integer.toString(i), appName);
           // use if(appName.equals(YOUR_APP_NAME))
        }
    }
}

您可以获取应用名称,包装名称,应用版本名称,应用版本代码,应用图标。

为所有这些创建一个Modal类(数据结构)

<强> ModalApps.java

   public class ModalApps {
    public String appname = "";
    public String pname = "";
    public String versionName = "";
    public int versionCode = 0;
    public Drawable icon;

}

现在getPackages()将返回所有包的信息

private ArrayList<PInfo> getPackages() {
    ArrayList<PInfo> 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<PInfo> getInstalledApps(boolean getSysPackages) {
    ArrayList<PInfo> res = new ArrayList<PInfo>();        
    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 ;
        }
        PInfo newInfo = new PInfo();
        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; 
}

使用此ArrayList,您可以创建与应用名称对应的包名称。