2011-11-05 110 views
1

我有一个广播接收器,它获取“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是包名。

+0

你表现出什么样子?尝试将以下行添加到意图过滤器以查看是否有任何区别: '' 建议在[此示例代码](http://developer.android .com/resources/faq/framework.html#7)并在[此处]提到过(http://stackoverflow.com/questions/3510544/android-how-to-intercept-the-install-application-intent)。 –

+0

是的,在那里 - 我得到(至少看起来像什么)的包名称很好,但它没有找到刚刚发送到我的应用程序的名称已被安装。超级难住这一个。 – Michelle

+0

那么,我能想到的唯一的其他原因是包名缺少一些东西 - 我们现在不要假设 - 或者对PackageManager的getApplicationInfo()方法的调用不应该是什么 - 例如,该方法采用的标志作为第二个参数。你能否复制你的有关代码的一部分? –

回答

1

想出来 - 事​​实证明,随PACKAGE_ADDED意图提供的字符串以“package:”开头,然后是包名 - 我没有抓到它,因为它没有在我的打印语句中突出显示我没有写过。只需要从数据字符串的起始处剥离标签,我就可以走了。

0

我碰到这个错误真的很烦人,因为我试图找到/意图的应用程序包名称在我复制的文本中有隐藏的字符。只是要小心重新输入你的包名或做一个日志,看看你真正在寻找什么包名,因为它可能不是你的想法。