有没有办法从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检索所需的信息,那将是理想的。
为了实现我的工作,我必须能够提取 SAME AllApps2D代码正在使用的ApplicationInfo对象,显然是:
com.android.Launcher2.ApplicationInfo
与返回的内容不同:
ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);
是:
android.content.pm.ApplicationInfo
可用于启动器的代码以及我正在使用的类here。
这些技术都不适用于Android构建中的 WITHIN launcher2应用程序。还有其他建议吗?
答案 0 :(得分:7)
如果您想获得所有应用程序,请执行以下操作:
import android.content.pm.ApplicationInfo;
...
List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);
有关单个应用程序的信息(假设您知道其清单包名称),请执行以下操作:
import android.content.pm.ApplicationInfo;
...
ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 0);
答案 1 :(得分:0)
ArrayList<PInfo> res = new ArrayList<PInfo>();
final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm
.getInstalledApplications(PackageManager.GET_META_DATA);
appName = new String[packages.size()];
for (ApplicationInfo packageInfo : packages) {
appName[count] = packageInfo.loadLabel(getPackageManager()).toString();
count++;
}
以上代码用于获取Android设备中已安装应用程序的所有信息,如版本,徽标,应用程序名称,软件包名称,权限以及所有已安装应用程序的所有信息。