前言
Android 10(API 29)及以上启用了 Scoped Storage(分区存储),限制了对外部存储的直接访问
Android < 6.0(API 23):只需在 AndroidManifest.xml 声明:
1 | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
Android 6.0 ~ 9(API 23~28):除了声明权限,还需动态申请:
1 | if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { |
Android 10+(API 29+):
默认启用 Scoped Storage,即使有权限也不能随意写入外部存储根目录。
可以使用以下三种方式
1 | // App 私有目录(无需权限,卸载时自动删除) |
或者
使用Scoped Storage
下载工具类
1 | import android.Manifest; |
下载目录
兼容各个版本的文件下载目录
1 | public static String getBaseDir(Context context) { |