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();
}
在我的软件中,用户信息列表以 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();
}