【问题标题】:How display installed applications in android?如何在android中显示已安装的应用程序?
【发布时间】:2013-10-31 15:12:36
【问题描述】:

使用此代码:

final PackageManager pm = getActivity().getPackageManager();
        //get a list of installed apps.
        List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

        for (ApplicationInfo packageInfo : packages) {
            Log.d(TAG, "Installed package :" + packageInfo.packageName);
            Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 

我可以在 logcat 包信息等中显示。但我想在我的活动中显示已安装应用程序的列表,如果可能的话,它的图标和应用程序的名称。可能吗? ps:我用的是片段

【问题讨论】:

标签: java android android-listview package package-managers


【解决方案1】:

查看此演示: Circle launcher

【讨论】:

    【解决方案2】:

    以下应该完成获取应用程序列表的工作

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    applications = mPackageManage.queryIntentActivities(intent, PackageManager.GET_META_DATA);
    

    【讨论】:

    • 但是我应该把这段代码放在哪里?我的意思是,我需要一个列表视图对吗?
    【解决方案3】:

    这样试试,

    首先为PackageItem创建一个模型

    public class PackageItem {
    
            private Drawable icon;
    
            private String name;
    
            private String packageName;
    
            public String getPackageName() {
                return packageName;
            }
    
            public void setPackageName(String packageName) {
                this.packageName = packageName;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public Drawable getIcon() {
                return icon;
            }
    
            public void setIcon(Drawable icon) {
                this.icon = icon;
            }
        }
    

    第 2 步)

    这将为您提供所有安装应用程序的列表以及应用程序名称、图标和包

    public List<PackageItem> getInstalledApplication(){
    
    PackageManager appInfo = getPackageManager();
                List<ApplicationInfo> listInfo = appInfo.getInstalledApplications(0);
                Collections.sort(listInfo, new ApplicationInfo.DisplayNameComparator(appInfo));
    
                List<PackageItem> data = new ArrayList<PackageItem>();
    
                for (int index = 0; index < listInfo.size(); index++) {
                    try {
                        ApplicationInfo content = listInfo.get(index);
                        if ((content.flags != ApplicationInfo.FLAG_SYSTEM) && content.enabled) {
                            if (content.icon != 0) {
                                PackageItem item = new PackageItem();
                                item.setName(getPackageManager().getApplicationLabel(content).toString());
                                item.setPackageName(content.packageName);
                                item.setIcon(getPackageManager().getDrawable(content.packageName, content.icon, content));
                                data.add(item);
                            }
                        }
                    } catch (Exception e) {
    
                    }
                }
          return data;
       }
    

    现在您可以在适配器类中使用此列表,

    希望这会对你有所帮助。

    【讨论】:

    • 那么,我必须创建一个适配器类吗?我不能直接在列表视图中插入这些值?
    • @David_D 您将在 ListView 中显示它,因此您需要 Adapter 以便您可以使用图标显示应用程序名称。
    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多