【发布时间】:2017-05-07 03:16:26
【问题描述】:
在我的 Android 应用中,在其中一项活动中,有一个“PDF 下载”按钮。单击此按钮时,我会创建一个 PDF,然后将其下载到“下载”目录。以下是我在按钮的单击事件上运行的代码:
public void createAndDownloadPDF()
{
try
{
PdfDocument document = new PdfDocument();
View content = this.findViewById(android.R.id.content);
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(content.getWidth(),
content.getHeight() - 20, 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
content.draw(page.getCanvas());
document.finishPage(page);
SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyyhhmmss");
String pdfName = "pdfdemo"
+ sdf.format(Calendar.getInstance().getTime()) + ".pdf";
File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), pdfName);
try
{
outputFile.createNewFile();
OutputStream out = new FileOutputStream(outputFile);
document.writeTo(out);
document.close();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
请注意,我在 MANIFEST 文件中添加了所需的 WRITE 权限,并在运行时请求了该权限。所以,不存在权限问题。
当我调试代码时,我注意到“outputFile”变量包含这个路径:
/storage/emulated/o/Download/pdfdemo07052017121233.pdf
我的用户永远不会在他们的手机中找到上述路径。因此,他们将不知道他们的 PDF 保存在哪里。我希望当用户点击他们手机上的“下载”图标时,他们应该看到他们从应用程序下载的 PDF 文件。
所以,我想如果我能整理出以下这行:
File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), pdfName);
我的工作会完成的。我应该使用什么路径才能将我的 PDF 文件保存/下载到“下载”目录中?我在互联网上进行了研究,但没有找到任何具体的解决方案。
【问题讨论】:
-
您使用的文件夹是正确的文件夹。但是您的用户在正确的文件夹中看不到您的文件的原因是下载应用程序不仅仅在该文件夹中查找文件。可能它会在 MediaStore 中查询文件。用户在关闭/打开设备后是否看到您的文件?
-
对于其余部分,我认为将您自己创建的文件放在公共下载文件夹中是一个坏主意。不是一开始就没有下载的吗?
-
createAndDownloadPDF()?函数名称错误。你不是在下载吗? -
使用普通的文件资源管理器应用程序,您应该能够在上述文件夹中看到您的 pdf 文件。现在你呢?
-
此外,如果确实创建了文件,您应该告诉我们。为什么不通知我们?