【发布时间】: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