我发现 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 工作正常。
有什么建议么?任何解决方法?