Android API 30 getExternalStorageDirectory
在Android开发中,我们经常会涉及到对外部存储空间进行读写操作。在Android API级别30及以上,Google推荐使用getExternalFilesDir()
和getExternalCacheDir()
方法来获取外部存储空间的目录路径,而不再推荐使用getExternalStorageDirectory()
方法。
为什么不推荐使用getExternalStorageDirectory()
方法?
在Android 10(API级别29)之后,Google引入了Scoped Storage的概念,即应用程序只能访问其私有数据目录和共享存储空间。这意味着应用程序无法直接访问SD卡上的任意文件,而是只能访问其私有目录和公共目录。
getExternalStorageDirectory()
方法返回的是SD卡的根目录路径,而这个目录在Scoped Storage的限制下无法直接访问。因此,为了适配Scoped Storage的限制,Google推荐使用getExternalFilesDir()
和getExternalCacheDir()
方法来获取外部存储空间的目录路径。
使用getExternalFilesDir()
方法获取外部存储空间的目录路径
getExternalFilesDir()
方法用于获取在外部存储空间上应用程序特有的文件目录。该目录会随着应用程序的卸载而被删除,是应用程序的私有数据目录。
File externalFilesDir = getExternalFilesDir(null);
上述代码中,getExternalFilesDir(null)
方法会返回外部存储空间上应用程序的私有文件目录。如果需要在特定的子目录下创建文件,可以传入一个String类型的参数,例如:
File subDir = getExternalFilesDir("myDirectory");
这样就会在外部存储空间上创建一个名为myDirectory
的子目录。
使用getExternalCacheDir()
方法获取外部存储空间的缓存目录路径
getExternalCacheDir()
方法用于获取在外部存储空间上应用程序特有的缓存目录。与getExternalFilesDir()
不同的是,缓存目录的数据会随着系统的存储空间不足而被删除,是应用程序的临时数据存储目录。
File externalCacheDir = getExternalCacheDir();
上述代码中,getExternalCacheDir()
方法会返回外部存储空间上应用程序的缓存目录路径。
适配Scoped Storage的限制
在Android API级别30及以上,为了适配Scoped Storage的限制,开发者应该尽量避免直接操作SD卡上的文件,而是通过getExternalFilesDir()
和getExternalCacheDir()
方法来获取外部存储空间的目录路径,以确保应用程序的数据安全性和稳定性。
关系图
erDiagram
File <|-- externalFilesDir
File <|-- externalCacheDir
以上是关于Android API 30中获取外部存储空间目录路径的科普文章,希望对你有帮助。
类图
classDiagram
ClassA <|-- File
ClassA <|-- externalFilesDir
ClassA <|-- externalCacheDir
在Android开发中,保持与最新API版本的适配是非常重要的。通过使用getExternalFilesDir()
和getExternalCacheDir()
方法来获取外部存储空间的目录路径,可以更好地适配Scoped Storage的限制,提高应用程序的稳定性和安全性。如果你还在使用getExternalStorageDirectory()
方法,建议尽快升级到新的API版本,以避免可能出现的问题。