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 メソッドが再度呼び出されると (30 分後)、パッケージがインストールされているかどうかに応じて、例外が正しくスローされるか、スローされません。これは Android 4.03 (Honeycomb をテストしていない) でのみ発生しますが、2.2 と 2.3 は正常に動作します。
助言がありますか?回避策はありますか?