【发布时间】:2012-06-05 19:47:05
【问题描述】:
我发现 PackageManager 类的 getPackageInfo() 方法有一些奇怪的行为。
我有一个应用小部件,它依赖于要安装的特定包。因此,在 onUpdate() 方法中,我测试是否安装了这个包:
public boolean isAppInstalled(String uri) {
PackageManager pm = context.getPackageManager();
boolean installed = false;
int flags = PackageManager.GET_ACTIVITIES;
try {
pm.getPackageInfo(uri, flags);
installed = true;
} catch (PackageManager.NameNotFoundException e) {
installed = false;
}
return installed;
}
因此,当调用 onUpdate() 方法时,大多数情况下它都可以正常工作。 但是,我发现在 Android 4.03 中,它会在设备重新启动时错误地抛出 NameNotFoundException,也就是说,在启动时,显然小部件 onUpdate() 方法被调用为“早期”。当再次调用小部件的 onUpdate 方法时(半小时后),它会正确抛出或不抛出异常,具体取决于是否安装了包。 这只发生在 Android 4.03(没有测试 Honeycomb)上,但 2.2 和 2.3 可以正常工作。
有什么建议吗? 有什么解决方法吗?
【问题讨论】: