从包管理器中检索应用程序信息

Jox*_*aex 4 android launcher android-applicationinfo

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

这是我尝试过的:

ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);
Run Code Online (Sandbox Code Playgroud)

错误:

Type mismatch: cannot convert from android.content.pm.ApplicationInfo to com.android.launcher2.ApplicationInfo
Run Code Online (Sandbox Code Playgroud)

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

我找到:

pack.getApplicationInfo(packageName, flags)
Run Code Online (Sandbox Code Playgroud)

不会返回与传递给AllApps2D.java中的以下函数的ApplicationInfo相同的ApplicationInfo对象:

public void addApps(ArrayList<ApplicationInfo> list)
Run Code Online (Sandbox Code Playgroud)

我试图从包本身拉出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();
    }
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

为了实现我的工作,我必须能够提取 AllApps2D代码正在使用的SAME ApplicationInfo对象,这显然是:

com.android.Launcher2.ApplicationInfo

这与返回的内容不同:

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

这是:

android.content.pm.ApplicationInfo

启动器可用的代码和我正在使用的类可以在这里找到.

这些技术没有工作WITHIN一款Android构建中的launcher2应用.还有其他建议吗?

hac*_*bod 7

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

import android.content.pm.ApplicationInfo;

...

List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);
Run Code Online (Sandbox Code Playgroud)

有关单个应用程序的信息(假设您知道其清单包名称),请执行以下操作:

import android.content.pm.ApplicationInfo;

...

ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 0);
Run Code Online (Sandbox Code Playgroud)