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

Android 从包管理器检索应用程序信息,android,launcher,android-applicationinfo,Android,Launcher,Android Applicationinfo,有没有办法从PackageManager中提取ApplicationInfo对象?我尝试了许多不同类型的方法来实现这一点,但都无济于事。我目前正在使用默认的android launcher屏幕(应用程序抽屉),并希望从软件包名称中获取软件包信息。这不是在应用程序层,而是在源Launcher2应用程序的构建层。我正在使用的android版本是2.3.3 以下是我尝试过的: ApplicationInfo item = pack.getApplicationInfo(package_list.get

有没有办法从PackageManager中提取ApplicationInfo对象?我尝试了许多不同类型的方法来实现这一点,但都无济于事。我目前正在使用默认的android launcher屏幕(应用程序抽屉),并希望从软件包名称中获取软件包信息。这不是在应用程序层,而是在源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)
public void addApps(ArrayList)


这些技术在android版本中的launcher2应用程序中都不起作用。还有其他建议吗?

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

import android.content.pm.ApplicationInfo;

...

List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);
ArrayList res=new ArrayList();
最终PackageManager pm=getPackageManager();
列表包=pm
.GetInstalledApplication(PackageManager.GET_元数据);
appName=新字符串[packages.size()];
对于(ApplicationInfo packageInfo:packages){
appName[count]=packageInfo.loadLabel(getPackageManager()).toString();
计数++;
}

上面的代码用于获取android设备中已安装应用程序的所有信息,如版本、徽标、应用程序名称、软件包名称、权限以及有关已安装应用程序的所有信息。

已经尝试过这一点,它们在Launcher2应用程序中不是同一个对象,您无法转换它们。还有其他建议吗?我有点被卡住了,无法转换确定如何处理。它们是完全相同的对象。可能Launcher2有自己的类名为ApplicationInfo。如果是这样的话……好吧,不要使用它。使用我的代码,这对平台的android.content.pm.ApplicationInfo非常重要。这里有一个建议:停止在Launcher2代码中执行此操作。编写一个小型测试应用程序来完成此操作。我你认为你是在给自己制造麻烦,因为你试图在一个大的现有代码库中做一些你不理解的事情。谢谢你的反馈hackbod。已经尝试过了,它们在Launcher2应用程序中不是同一个对象,你不能转换它们。还有其他建议吗?
import android.content.pm.ApplicationInfo;

...

List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);
import android.content.pm.ApplicationInfo;

...

ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 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++;
    }