收到PACKAGE_REMOVED广播时如何获取ApplicationInfo?

时间:2014-07-30 08:32:03

标签: android android-intent

我想要做的是在删除或添加应用程序时更新本地数据库。 但是当我得到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();
                }
        }
}

2 个答案:

答案 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删除了应用程序并且将来可能会被替换或重新安装,则可能会导致此状态。

注意:此标志可能导致返回当前安装的应用程序的信息较少。