android - ApplicationInfo 与 PackageInfo 与 ResolveInfo

标签 android android-package-managers

对于手机上安装的所有应用程序,我需要访问:

  • 姓名
  • 图标
  • 可以安装应用程序的 google play url

我查看了 ApplicationInfo,但它似乎没有向我提供此信息。我听说过 PackageInfo 和 ResolveInfo,但是我很困惑它们之间有什么区别,应该在哪里使用哪一个?最后,我可以使用什么来查找有关已安装应用程序的上述三个详细信息?

对于包名,我得到像 com.something.some 这样的东西

这是我用来获取应用程序的代码:

final PackageManager pm = getPackageManager();
ArrayList<ApplicationData> listAppData = new ArrayList<ApplicationData>();

//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    listAppData.add(new ApplicationData(packageInfo));
}

ApplicationData 是我自己的类,我从 packageInfo 中提取信息

最佳答案

此函数将返回包含图标、名称和包的应用程序列表。

有了这个包,你可以构建 url:

https://play.google.com/store/apps/details?id= <PACKAGE>

参见:

public class Application {

    private String packageName;
    private String name;
    private Drawable icon;
    private boolean checked;
...

private List<Application> getAllApplications(Context context)
            throws NameNotFoundException {

        PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> packages = packageManager.getInstalledPackages(0);

        List<Application> myPackages = new ArrayList<Application>();

        for (PackageInfo pack : packages) {
            if (pack.versionName == null) {
                continue;
            }

            Application newPack = new Application();
            newPack.setPackageName(pack.packageName);
            newPack.setName(pack.applicationInfo.loadLabel(packageManager)
                    .toString());
            newPack.setIcon(pack.applicationInfo.loadIcon(packageManager));

            myPackages.add(newPack);
        }

        return myPackages;
    }

关于android - ApplicationInfo 与 PackageInfo 与 ResolveInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20490022/

相关文章:

android - PackageManager 名称未找到异常

java - 改造 2.0 : getting response code 200 but not getting the desired data

Android (Things) GATT 服务器停止广告

android - 如何在服务和 Activity 之间发送/接收广播

android - 如何使用 PackageManager.GET_INTENT_FILTERS 获取 Intent 过滤器

android - 使用 PackageManager.setComponentEnabledSetting() 启用其他应用程序的 BroadcastReceiver

php - 通过 PHP - WAMP 服务器将数据插入 MySQLi

android - 具有相同 filter_complex 的 FFMpeg 多个操作

android - 无法对非静态方法 getPackageManager() 进行静态引用

android - 如何仅在手机上安装了与之相关的apk时才显示菜单选项