我想要做的是在删除或添加应用程序时更新本地数据库。 但是当我得到PACKAGE_REMOVED时,我发现它无法再获得它的ApplicationInfo。它只是抛出了namenotfound异常。任何建议?谢谢。
if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
try{
final String packageName = intent.getData().getSchemeSpecificPart();
ApplicationInfo app = pm.getApplicationInfo(packageName, 0);
final String fname = app.sourceDir;
String md5 = Util.Md5(fname);
dbm.deleteApk(md5);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
广播Intent PACKAGE_REMOVED
时,该包已被删除。那时为时已晚。您需要在此之前保存所需的信息。您可以在安装软件包时执行此操作,也可以在启动时运行应用程序并为所有已安装的软件包收集ApplicationInfo
并将其保存在数据库或其他任何软件包中。当用户删除包时,您将获得PACKAGE_REMOVED
广播,您可以在本地数据库中找到所需的信息。
答案 1 :(得分:0)
尝试:
pm.getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
public static final int GET_UNINSTALLED_PACKAGES 在API级别3中添加
Flag参数,用于检索有关具有数据目录的所有应用程序(甚至是未安装的应用程序)的一些信息。如果使用标志DONT_DELETE_DATA删除了应用程序并且将来可能会被替换或重新安装,则可能会导致此状态。
注意:此标志可能导致返回当前安装的应用程序的信息较少。