获取android中所有已安装应用的图标

Posted

技术标签:

【中文标题】获取android中所有已安装应用的图标【英文标题】:Get icons of all installed apps in android 【发布时间】:2012-05-28 14:17:05 【问题描述】:

我想获取所有已安装应用程序的图标。我可以使用包管理器获取该图标吗?它有什么功能吗?或任何其他方式在位图中获取所有已安装应用程序的图标?

谢谢!

【问题讨论】:

android 3.0 开始,您可能想要一个更大的启动器图标,而您无法按照您描述的方式获得。如果是这样,也许我对以下问题的回答可以帮助您:***.com/questions/4600740/getting-app-icon-in-android/… 【参考方案1】:
try 
    String pkg = "com.app.my";//your package name
    Drawable icon = getContext().getPackageManager().getApplicationIcon(pkg);
    imageView.setImageDrawable(icon);
 catch (PackageManager.NameNotFoundException ne) 


查看here了解更多详情。

【讨论】:

不适用于 FB、android P 中的 chrome 等少数应用 导致 outOfMemoryError【参考方案2】:

以上答案都不错。

您的问题是:- 获取android中所有已安装应用的图标? 你想要安装应用程序图标列表

这里是帮助您使用应用程序(图标,包名称)获取安装应用程序列表的代码。

**Declare variable in your Activity**

private CustomAppListAdapter customAppListAdapter;
private ArrayList<AppListMain> appListMainArrayList;
private AppListMain appListMain;

只需在 Activity onCreate() 中调用下面的函数 loadApps()

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_app_list);
    loadApps();
    


public void loadApps() 
    try 
        packageManager = getPackageManager();
        appListMainArrayList = new ArrayList<>();
        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, 0);

        for (ResolveInfo resolveInfo : resolveInfoList) 
            AppListMain appListMain = new AppListMain();
            appListMain.setAppIcon(resolveInfo.activityInfo.loadIcon(packageManager));
            appListMain.setAppName(resolveInfo.loadLabel(packageManager).toString());
            appListMain.setAppPackage(resolveInfo.activityInfo.packageName);
            appListMainArrayList.add(appListMain);
        
     catch (Exception e) 
        e.printStackTrace();
    

这里是Link供参考

您可以从我的 Github 存储库下载自定义启动器代码

【讨论】:

【参考方案3】:

我觉得这是最简单的方法:

private List<ResolveInfo> installedApps() 
    final Intent main_intent = new Intent(Intent.ACTION_MAIN, null);
    main_intent.addCategory(Intent.CATEGORY_LAUNCHER);
    return package_manager.queryIntentActivities(main_intent, 0);

现在要获取图标,使用这个:

for(ResolveInfo ri : installedApps())  
    // to get drawable icon -->  ri.loadIcon(package_manager)

【讨论】:

【参考方案4】:

试试这个方法:创建一个名为PackageInformation的类:

public class PackageInformation 

    private Context mContext;

    public PackageInformation(Context context) 
        mContext = context;
    

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


        public void InfoObjectAggregatePrint()  //not used yet
            Log.v(appname, appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
        

    

    private ArrayList < InfoObject > getPackages() 
        ArrayList < InfoObject > apps = getInstalledApps(false);
        final int max = apps.size();
        for (int i = 0; i < max; i++) 
            apps.get(i).prettyPrint();
        
        return apps;
    

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


把它藏在某个地方,现在要从你的工作活动类中访问信息,请执行以下操作:

PackageInformation androidPackagesInfo = new PackageInformation(this);
ArrayList < InfoObject > appsData = androidPackagesInfo.getInstalledApps(true);

for (InfoObject info: appsData) 
    Toast.makeText(MainActivity.this, info.appname, 2).show();
    Drawable somedrawable = info.icon;


【讨论】:

【参考方案5】:

下面是获取所有已安装应用程序图标的代码。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
            try 
                // try getting the properly colored launcher icons
                LauncherApps launcher = (LauncherApps) this.getSystemService(LAUNCHER_APPS_SERVICE);
                List<LauncherActivityInfo> activityList = launcher.getActivityList(packageName, android.os.Process.myUserHandle());
                drawable = activityList.get(0).getBadgedIcon(0);
             catch (Exception e) 
            
        

        if (drawable == null) 

            try 
                getPackageManager().getApplicationIcon(packageName);
             catch (PackageManager.NameNotFoundException e) 
                e.printStackTrace();
            
        

【讨论】:

以上是关于获取android中所有已安装应用的图标的主要内容,如果未能解决你的问题,请参考以下文章

如何提取android手机所有app的icon图标

获取 Android 应用程序包的所有已安装功能

Android获取到手机应用图标并显示在页面上

linux怎么用命令看android手机上已安装应用的名字,包名,版本,图标。比如adb啥的。

应用程序已安装,但图标未出现在启动器屏幕或应用程序列表中

应用程序图标缺失/未出现android studio