【问题标题】:Issue retrieving package name of android apps问题检索 android 应用程序的包名称
【发布时间】:2014-12-19 22:12:28
【问题描述】:

我正在尝试获取已映射的多个应用程序的包名称。我想使用ResolveInfo.activityInfo.packageName 访问它们,但我遇到了问题,尤其是activityInfo,因为Java 不断通知我"static method cannot be referenced from a static context." 我假设我需要创建一个新对象,然后访问每个应用程序的包名称但我只是不知道该怎么做。

这是我要打印此信息的部分代码:

public void printPackageName() {
    Iterator<Map.Entry<String, ResolveInfo>> entries = selectedMap.entrySet().iterator();
    while (entries.hasNext()) {
         Map.Entry<String, ResolveInfo> entry = entries.next();
         String pname = ResolveInfo.activityInfo.packageName;
         System.out.println("App info: " + pname);
         }
    }

我看到了一个类似问题的解决方案,用户想要主目录的包名。在他们的情况下,问题已通过以下代码解决。我假设我可能会出于我的目的修改此代码,但我没有使用意图。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent,  PackageManager.MATCH_DEFAULT_ONLY);
String currentHomePackage = resolveInfo.activityInfo.packageName;

【问题讨论】:

    标签: java android package


    【解决方案1】:

    ResolveInfo 是一个类。您需要一个实例来访问activityInfo。另外,ActivityInfo 不包含名为packageName 的成员,但您可能想要resolvePackageName,例如:

    while (entries.hasNext()) {
         Map.Entry<String, ResolveInfo> entry = entries.next();
         String pname = entry.getValue().resolvePackageName;
         System.out.println("App info: " + pname);
    }
    

    【讨论】:

    • 你的意思是我需要一个 ResolveInfo 的实例来访问 activityInfo 吗?或者我需要任何我正在使用的实例来访问activityInfo?
    • 你需要ResolveInfoinstance,你已经把它放在了地图中。如图所示,您可以通过getValue() 获得它。按照您的方式,您将迭代映射条目,但不对它们执行任何操作,而是尝试访问 ResolveInfo 类上不存在的静态字段。
    • 感谢您的清晰解释,我很感激。我会试试这个解决方案,看看效果如何。
    • 好吧,将代码发布到您填充地图的位置。看起来您没有在其中输入任何值。
    • 很抱歉回复晚了,但我能够让它工作。我实际上需要将我的字符串设置为 entry.getValue().activityInfo.packageName;在那之后,它完美地工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2015-07-21
    • 2012-04-06
    • 2013-10-30
    • 2021-11-04
    • 2014-03-01
    相关资源
    最近更新 更多