重置包管理器缓存

时间:2016-02-17 20:46:08

标签: android pdf google-play-services

我正在使用Android应用,允许用户下载和查看一系列文件,主要是PDF。当用户点击PDF的文件链接时,它正在使用PackageManager来确定用户是否安装了可以显示该文件的应用程序,如果是,则允许他们启动它。如果他们不这样做,则允许他们下载并保存文件。

我遇到了每个新设备或模拟器的问题。如果设备没有现有的PDF阅读器,他们会得到“没有找到应用程序”#34;对话。如果我去谷歌播放并安装一个,然后尝试再次下载该文件,应用程序仍然不知道那里有一个PDF阅读器。

我尝试重新启动设备,清除应用的缓存和数据。我无法弄清楚如何让Package Manager更新并意识到已经安装了可以处理它的应用程序。

最终它开始工作,但可能需要一些时间。

有没有办法强制重置?我猜测包管理器有一个它依赖的缓存。

这是我的代码,用于检查是否安装了可以处理请求的应用。

    String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    if (extension.equalsIgnoreCase("") || mimetype == null) {
        intent.setDataAndType(Uri.parse(resource.getUrl()), "text/*");
    } else {
        intent.setDataAndType(Uri.parse(resource.getUrl()), mimetype);
    }

    PackageManager packageManager = getActivity().getPackageManager();
    if (packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) {
        startActivity(Intent.createChooser(intent, "Choose an Application:"));
        return;
    } else {
      // Show Error Dialog
    }

0 个答案:

没有答案