我正在使用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
}