有没有办法从 PackageManager 中提取 ApplicationInfo 对象?我尝试了许多不同类型的方法来实现这一点,但无济于事。我目前正在使用默认的 android 启动器屏幕(应用程序抽屉),并希望专门从包名称中获取包信息。这不是在应用程序层,而是在Launcher2 应用程序的构建层,即源。我正在使用的 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 检索必要的信息,那将是理想的。
为了使我实现的工作正常,我必须能够提取 AllApps2D 代码正在使用的SAME ApplicationInfo 对象,这显然是:
com.android.Launcher2.ApplicationInfo
这与返回的内容不同:
ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);
这是:
android.content.pm.ApplicationInfo
可用于启动器的代码和我正在使用的类可在此处找到。
这些技术都不能在 android 构建中的 launcher2 应用程序中工作。还有其他建议吗?