【问题标题】:Known package name not found with package manager包管理器找不到已知的包名称
【发布时间】:2011-11-05 22:34:26
【问题描述】:

我有一个广播接收器,它可以获取“android.intent.action.PACKAGE_ADDED”和“android.intent.action.PACKAGE_REPLACED”意图(因此,当手机上安装了一个包时,我的应用会获得一个带有包裹名字)。但是当我尝试使用 PackageManager 通过包名称获取 PackageInfo 时,它会抛出 NameNotFoundException。

这可能有什么原因(除了不存在的包,显然不是这种情况)?我找不到太多关于权限的信息 - 我是否遗漏了导致误导性错误的权限?

try {
    id = UAppIDUtils.GetUAppID(ctx.getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES));
} catch (NameNotFoundException e) {
    id = null;
    Log.v(TAG, "Error finding package info");
    e.printStackTrace();
}

ctx 是上下文; pkgName 是包名。

【问题讨论】:

  • 你的清单是什么样的?尝试将以下行添加到意图过滤器中,看看是否有任何不同:<data android:scheme="package" /> 建议在 this example code 中并在 here 之前提到。
  • 是的,就是这样 - 我得到(至少看起来像)包名称就好了,但是它找不到刚刚发送到我的应用程序的名称已经安装.超级难倒这个。
  • 好吧,我能想到的唯一其他原因是包名称缺少某些东西 - 我们暂时不要假设 - 或者您对 PackageManager 的 getApplicationInfo() 方法的调用不应该是它应该的是-例如该方法作为第二个参数的标志。你能复制一部分你的相关代码吗?
  • 想一想:能不能在收到广播的时候验证一下包真的安装了?看看 PackageManager 的 getInstalledPackages()getInstalledApplications() 方法。
  • 打印出已安装包的列表,并列出意图中的包名。上面还添加了代码。

标签: android


【解决方案1】:

想通了——事实证明,带有 PACKAGE_ADDED 意图的字符串以“package:”开头,然后是包名——我没有抓住它,因为它在我的打印语句中并没有像我没写。只需要将标签从数据字符串的开头剥离就可以了。

【讨论】:

    【解决方案2】:

    我遇到此错误的一个非常烦人的时间是,我试图查找/打算查找的应用程序的包名称在我复制的文本中包含隐藏字符。只是要小心重新输入您的包名称或记录日志以查看您真正要查找的包名称,因为它可能不是您想的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2019-01-01
      • 2013-01-03
      • 1970-01-01
      • 2017-12-06
      • 2011-12-26
      • 1970-01-01
      相关资源
      最近更新 更多