Android 13中无需SAF,在设备根目录创建应用专属PDF存储文件夹的方法
在Android设备根目录创建应用专属PDF文件夹的方案
一、Android 9(API 28)及以下版本
该版本无Scoped Storage限制,只需声明并动态申请WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限,即可通过File类直接在根目录创建文件夹:
权限声明(Manifest文件)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
创建文件夹代码
// 获取外部存储根目录,创建名为"MyAppPDFs"的文件夹 File pdfFolder = new File(Environment.getExternalStorageDirectory(), "MyAppPDFs"); if (!pdfFolder.exists()) { boolean isCreated = pdfFolder.mkdirs(); if (isCreated) { // 文件夹创建成功,可执行文件写入操作 } else { // 处理创建失败的异常场景 } }
注:API 23及以上版本需动态申请上述权限。
二、Android 10(API 29)版本
Android 10引入Scoped Storage,但可通过过渡方案绕过限制:在Manifest的application标签中添加android:requestLegacyExternalStorage="true",之后沿用Android 9及以下的代码逻辑创建根目录文件夹。不过这只是临时方案,建议逐步适配Scoped Storage规范。
三、Android 11(API 30)及以上版本
该版本强制启用Scoped Storage,直接在根目录创建文件夹需申请MANAGE_EXTERNAL_STORAGE特殊权限:
权限声明(Manifest文件)
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:minSdkVersion="30" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
引导用户开启权限并创建文件夹
该权限无法通过常规弹窗申请,需跳转至系统设置页面让用户手动开启:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (!Environment.isExternalStorageManager()) { Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); } else { // 已获取权限,执行文件夹创建 File pdfFolder = new File(Environment.getExternalStorageDirectory(), "MyAppPDFs"); if (!pdfFolder.exists()) { pdfFolder.mkdirs(); } } }
关键提醒
MANAGE_EXTERNAL_STORAGE权限的Google Play审核门槛极高,仅文件管理器、备份恢复、反病毒等特定类型应用可通过审核,普通应用提交后大概率被拒。- 更合规的替代方案:使用应用专属外部存储目录(
Context.getExternalFilesDir(null)),无需额外权限,应用拥有完全访问权,卸载时会自动清理目录下文件。代码示例:
File pdfFolder = new File(getExternalFilesDir(null), "PDFs"); if (!pdfFolder.exists()) { pdfFolder.mkdirs(); }
此方案符合Scoped Storage设计规范,无权限审核风险。
内容的提问来源于stack exchange,提问作者Andyson
相关产品推荐
相关产品推荐

