PDF 文件未保存在 Android 11 下载文件夹中

The PDF file is not saved in the Android 11 Download folder

在我的软件中,用户信息列表以 PDF 文件的形式离线生成。我在 Android 7 和 8 上测试了这个操作,一切正常。但是当我在 Android 11 上测试时,没有生成文件。我一直在寻找解决方案,但我并没有真正找到该领域的完整资源和培训。

我可以通过 Intent 创建一个 PDF 文件,但是在另一个软件中,我看到当我点击保存按钮时,在 Documents 文件夹中创建了一个具有程序名称的文件夹并创建了文件里面。

这是我用来将 PDF 文件保存在下载文件夹中的代码,适用于 Android 7 和 8。

 public void savePdfFileToStorage(String pdfTitleHeader, String currentTime, PdfDocument pdfDocument, Context context) {
        String PdfDir=Environment.getExternalStorageDirectory() + "/Download/Apple";
        File dir=new File(PdfDir);
        if (!dir.exists())
            dir.mkdir();

        String fileName = pdfTitleHeader + "_" + todayDate() + "_" + convertToEnglishDigits(currentTime) + ".pdf";

        File file = new File(PdfDir,fileName);
        if (!file.exists()) {
            try {
                file.createNewFile();
                Log.e(TAG, "savePdfFileToStorage: " + "file created" + file.getName() + "path: " + file.getPath());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            pdfDocument.writeTo(new FileOutputStream(file));
            Log.e(TAG, "savePdfFileToStorage: pdf Wrote in file");
            Toast.makeText(context, "فایل PDF در پوشه Download/Apple حافظه داخلی ذخیره شد.", Toast.LENGTH_LONG).show();

        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(context, "فایل PDF ساخته نشد.", Toast.LENGTH_LONG).show();
        }
        pdfDocument.close();
    }

并且我在 Manifest 文件中写了这些代码。

      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <application>
                    ...
                    android:requestLegacyExternalStorage="true"
                    ...
      </application>

请指教我应该在哪里添加代码来解决Android 11.

中的存储问题

This code generates a similar name: allTransaction 20220202 10:15:23 .pdf

: 是文件名和路径中的禁止字符。

我使用了以下代码,终于能够将文件保存在 Documents 文件夹中。

 public void savePdfFileToStorage(String pdfTitleHeader, String currentTime, PdfDocument pdfDocument, Context context) {
        File dir;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
            dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/Apple");
        else dir = new File(Environment.getExternalStorageDirectory() + "/Apple");

      if (!dir.exists())
        if(!dir.mkdir())
           return;

        String fileName = pdfTitleHeader + "_" + todayDate() + "_" + convertToEnglishDigits(currentTime) + ".pdf";

        File file = new File(dir, fileName);
        if (!file.exists()) {
            try {
                file.createNewFile();
                Log.e(TAG, "savePdfFileToStorage: " + "file created" + file.getName() + "path: " + file.getPath());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            pdfDocument.writeTo(new FileOutputStream(file));
            Log.e(TAG, "savePdfFileToStorage: pdf Wrote in file");
            Toast.makeText(context, "فایل PDF در پوشه Download/Appleحافظه داخلی ذخیره شد.", Toast.LENGTH_LONG).show();

        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(context, "فایل PDF ساخته نشد.", Toast.LENGTH_LONG).show();
        }
        pdfDocument.close();
    }