Android的内部存储和外部存储怎么区分?

1.定义

内部存储:内部存储位于Android手机系统的**data/data/<包名>**这个目录下,内部存储是私有的,主要用于存储系统和应用程序的某些数据,对于其他应用程序来说是不可见的,并且会随着应用程序的卸载而被删除。

外部存储:外部存储可以分为外部私有存储和外部公有存储。外部私有存储位于**/storage/emulated/0/Android/data/包名**这个目录下,它和内部存储一样是私有的,并且其他应用程序是无法访问的,会随着应用程序的卸载而被清除。

外部公有存储位于**/storage/emulated/0**目录下,例如Movies,Music,DCIM等等。它对所有的应用程序都是可见的,前提是该应用程序有外部存储权限,而且外部公有存储中的数据不会随应用程序的卸载而被删除。

2.使用哪些api进行访问?

内部存储:

  1. context.getFilesDir()
  2. context.getCacheDir() // data/data/<包名>/cache

外部私有存储:

  1. context.getExternalFilesDir(String type)
  2. context.getExternalCacheDir() // /storage/emulated/0/Android/data/<包名>/cache

外部公有存储:

  1. Environment.getExternalStorageDirectory()
  2. Environment.getExternalStoragePublicDirectory(String type)

参数type用于指定文件夹的类型,可以有以下取值:(getExternalFilesDir和Environment.getExternalStoragePublicDirectory这两个函数的参数type的取值是一样的)

  1. Environment.DIRECTORY_MUSIC
  2. Environment.DIRECTORY_PICTURES
  3. Environment.DIRECTORY_MOVIES
  4. Environment.DIRECTORY_DCIM
  5. Environment.DIRECTORY_DOCUMENTS

......

注:在Android10之后,不能再使用外部公有存储下的两个方法了,应用程序只能访问自己的外部私有目录,所以Android10之后尽量使用外部私有存储下的两个方法。