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版本,以避免可能出现的问题。