2011-11-05 72 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

我碰到這個錯誤真的很煩人,因爲我試圖找到/意圖的應用程序包名稱在我複製的文本中有隱藏的字符。只是要小心重新輸入你的包名或做一個日誌,看看你真正在尋找什麼包名,因爲它可能不是你的想法。