java - 从 Android 的下载文件夹中获取 pdf 或 doc 文件
问题描述
我正在尝试多种方法来打开用户的下载文件夹并允许用户只选择要打开的 doc 或 pdf 文件。那里的大多数方法已被弃用,它们的替代方法似乎对我不起作用。
当前代码:
// I've heavily altered the code but hope you guys understand the gist of it.
//Steps:
// Open the Downloads folder
// Let user select the pdf or docx.
// Open the doc or pdf.
// Adding Syllabus Function Method Here.
addSyllabus = findViewById(R.id.add_syllabus_button);
addSyllabus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webview = (WebView) findViewById(R.id.webView);
progressbar = (ProgressBar) findViewById(R.id.progressBar);
webview.getSettings().setJavaScriptEnabled(true);
String filename = "https://s25.q4cdn.com/967830246/files/doc_downloads/test.pdf";
webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + filename);
webview.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
// do your stuff here
progressbar.setVisibility(View.GONE);
}
});
}
});
欣赏它,谢谢。
解决方案
Intent
来自DocumentsProvider可能是您最好的选择。
从这个谷歌指南:
private void openFile(Uri pickerInitialUri) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
// Optionally, specify a URI for the file that should appear in the
// system file picker when it loads.
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri);
startActivityForResult(intent, PICK_PDF_FILE);
您可以setType
如图所示使用,如果您想默认为下载,则可以putExtra
如图所示使用。更改pickerInitialUri
为正确的 URI,我认为它可以作为常量找到:Environment.DIRECTORY_DOWNLOADS
.
更新:我现在意识到您想要的文件类型不止一种。根据这个线程:您可以使用:
String [] mimeTypes = {"application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"};
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
(我从mozilla获得了 MIME 类型字符串。)
推荐阅读
- z3 - z3 smt 示例 mini_ic3.py
- python-3.x - 只有整数标量数组可以转换为标量索引
- android - 为什么基于片段的 viewPager.setCurrentItem 在适配器中不起作用?
- javascript - 敌人需要走向形象
- python - 如何在 python 中连接 Riot API
- apache-spark - 在hue查询中执行hivesql后如何停止'hive on spark'作业
- html - 媒体查询在移动纵向模式下不起作用
- java - 如何检查用户是否存在于 Linux (JSch)
- c++ - 我们如何处理小于 double 但大于 float 的固定精度?
- android - 访问类的有效方法是驻留在应用程序模块的清单模块中吗?