2017-05-07 91 views
1

在我的Android應用程序中,在其中一項活動中,有一個「PDF下載」按鈕。點擊此按鈕後,我創建一個PDF,然後將其下載到「Downloads」目錄。以下是我的代碼運行在按鈕的單擊事件:Android:創建並下載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(); 
     } 
    } 

請注意,我添加了必需的寫權限清單文件還要求在運行時的權限。所以,沒有權限問題。

當我調試的代碼,我注意到,「outputFile」變量中保存此路徑:

/storage/emulated/o/Download/pdfdemo07052017121233.pdf 

我的用戶永遠不會發現他們的移動上面的路徑。所以,他們不知道他們的PDF保存在哪裏。我希望當用戶點擊移動設備上的「下載」圖標時,他們應該看到他們從應用程序下載的PDF文件。

所以,我想如果我能整理出以下行:

File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), pdfName); 

我的工作將完成。我應該使用什麼路徑才能將我的PDF文件保存/下載到「Downloads」目錄中?我研究了互聯網,但沒有找到具體的解決方案。

+0

那麼你使用的文件夾是正確的文件夾。但是,您的用戶沒有在正確的文件夾中看到您的文件的原因是,下載應用程序不只是在文件夾中查找文件。可能它會向MediaStore查詢文件。用戶在關閉/打開設備後是否看到您的文件? – greenapps

+0

對於其餘的我認爲把你自己創建的文件放到公共下載文件夾中是一個壞主意。它不是下載開始是不是? – greenapps

+0

'createAndDownloadPDF()'?錯誤的函數名稱。你不是在下載嗎? – greenapps

回答

0

試試這個:

File outDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()); 

如果這不起作用,評估將以前生成並保存到你的資產文件夾內的文件夾您的PDF文件的機會。如果這樣可以的話,上面的行之後插入這樣的:

copyAssets("XXX",outDir.toString()); 

其中「xxx」是你的資產文件夾中的文件夾,其中將包含PDF文件的名稱。這會在您的設備上將XXX的內容複製到DOWNLOADS/XXX

+0

它得到相同的路徑。沒有效果。 – Meraqp

+0

請注意,我的語法'File outDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString());'是創建一個文件夾。您正在嘗試使用幾乎相同來創建文件。 – statosdotcom