有没有办法从 PackageManager 中提取 ApplicationInfo 对象?我尝试了许多不同类型的方法来实现这一目标,但都无济于事。我目前正在使用默认的 android 启动器屏幕(应用程序抽屉),并希望专门从包名称中获取包信息。这个是,不是应用层的,而是Launcher2 Application的构建层,源码。我正在使用的 android 版本是 2.3.3 。

这是我尝试过的:

ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);

错误:
Type mismatch: cannot convert from android.content.pm.ApplicationInfo to com.android.launcher2.ApplicationInfo

这不是用于检索当前正在运行的包,而是用于检索手机本身的所有应用程序。

我找到:
pack.getApplicationInfo(packageName, flags)

不返回与传递给以下 AllApps2D.java 中的函数的 ApplicationInfo 相同的 ApplicationInfo 对象:
public void addApps(ArrayList<ApplicationInfo> list)

我正在尝试从包本身中提取 ApplicationInfo 对象的名称。

有问题的功能如下,在 AllApps2D.java(Launcher2 文件夹)的开源代码中找到
 private ArrayList<ApplicationInfo> mAllAppsList = new ArrayList<ApplicationInfo>();

 public void addApps(ArrayList<ApplicationInfo> list) {
        final int N = list.size();

        for (int i=0; i<N; i++) {
            final ApplicationInfo item = list.get(i);
            int index = Collections.binarySearch(mAllAppsList, item,
                    LauncherModel.APP_NAME_COMPARATOR);
            if (index < 0) {
                index = -(index+1);
            }
            mAllAppsList.add(index, item);
        }
        mAppsAdapter.notifyDataSetChanged();
    }

更新

基本上我想做的是用自定义顺序重新排列启动器中图标的排列。如果我可以通过 PackageManager 检索为此所需的信息,那将是理想的。

为了使我实现的工作能够正常工作,我必须能够拉动 SAME
AllApps2D 代码正在使用的 ApplicationInfo 对象,显然是:
com.android.Launcher2.ApplicationInfo
这与返回的内容不同:
ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);
即:
android.content.pm.ApplicationInfo
可用于启动器的代码以及我正在使用的类是 here

这些技术都不适用于 WITHIN android 构建中的 launcher2 应用程序。还有其他建议吗?

最佳答案

如果要获取所有应用程序,请执行以下操作:

import android.content.pm.ApplicationInfo;

...

List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);

有关单个应用程序的信息(假设您知道其 list 包名称),在此行中完成:
import android.content.pm.ApplicationInfo;

...

ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 0);

10-08 07:39