如何在Kotlin版Android Studio中获取Android设备内部存储绝对路径?
在Kotlin版Android Studio中获取Android设备内部存储路径的正确方式
首先得明确Android里「内部存储」的两种常见场景,对应不同的获取方式:
1. 获取App私有内部存储路径(仅当前App可访问)
这是用于存放App专属私有数据的安全路径,不需要任何存储权限,路径格式为/data/data/你的包名/files。
直接通过Context调用即可:
// 在Activity/Fragment中直接使用 val privateInternalPath = filesDir.absolutePath // 在非UI类中,需要传入Context实例 val privateInternalPath = context.filesDir.absolutePath
2. 获取内置公共存储路径(设备内置的公共存储,非SD卡)
你之前用Environment.getStorageDirectory()拿到SD卡路径,大概率是因为设备将SD卡设为了默认外部存储。如果要获取设备内置的公共存储(比如存放照片、下载文件的内置存储),分版本处理:
Android 9(API 28)及以下
可以直接用Environment.getExternalStorageDirectory(),它返回的是内置公共存储的根路径:
val publicInternalStorageRoot = Environment.getExternalStorageDirectory().absolutePath
Android 10(API 29)及以上
Android 10开始限制直接访问公共存储根目录,官方推荐通过指定公共目录(如下载、图片目录)来获取路径:
// 获取公共下载目录路径 val publicDownloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath // 获取公共图片目录路径 val publicPictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath
注:
getExternalStoragePublicDirectory在Android Q+标记为废弃,但仍可正常使用;如果需要在公共目录创建/修改文件,建议配合MediaStore或存储访问框架(SAF)实现,避免权限问题。
区分内置公共存储和SD卡路径
如果需要同时获取内置公共存储和SD卡的App私有目录路径,可以用getExternalFilesDirs方法,返回的数组中第一个元素是内置存储路径,第二个是SD卡路径(若存在):
val externalDirs = context.getExternalFilesDirs(null) // 内置外部存储的App私有目录 val internalExternalPath = externalDirs[0]?.absolutePath // SD卡的App私有目录(存在则返回) val sdCardPath = externalDirs.getOrNull(1)?.absolutePath
你之前尝试的Environment.getRootDirectory()返回的是系统根目录/system,不是存储目录,所以调用listFiles()没有结果,这是用错了方法。
内容的提问来源于stack exchange,提问作者paolov
相关产品推荐
相关产品推荐

