1.定义
内部存储:内部存储位于Android手机系统的data/data/<包名>这个目录下,内部存储是私有的,主要用于存储系统和应用程序的某些数据,对于其他应用程序来说是不可见的,并且会随着应用程序的卸载而被删除。
外部存储:外部存储可以分为外部私有存储和外部公有存储。外部私有存储位于/storage/emulated/0/Android/data/包名这个目录下,它和内部存储一样是私有的,并且其他应用程序是无法访问的,会随着应用程序的卸载而被清除。
外部公有存储位于/storage/emulated/0目录下,例如Movies,Music,DCIM等等。它对所有的应用程序都是可见的,前提是该应用程序有外部存储权限,而且外部公有存储中的数据不会随应用程序的卸载而被删除。
2.使用哪些api进行访问?
内部存储:
- context.getFilesDir()
- context.getCacheDir() // data/data/<包名>/cache
外部私有存储:
- context.getExternalFilesDir(String type)
- context.getExternalCacheDir() // /storage/emulated/0/Android/data/<包名>/cache
外部公有存储:
- Environment.getExternalStorageDirectory()
- Environment.getExternalStoragePublicDirectory(String type)
参数type用于指定文件夹的类型,可以有以下取值:(getExternalFilesDir和Environment.getExternalStoragePublicDirectory这两个函数的参数type的取值是一样的)
- Environment.DIRECTORY_MUSIC
- Environment.DIRECTORY_PICTURES
- Environment.DIRECTORY_MOVIES
- Environment.DIRECTORY_DCIM
- Environment.DIRECTORY_DOCUMENTS
......
注:在Android10之后,不能再使用外部公有存储下的两个方法了,应用程序只能访问自己的外部私有目录,所以Android10之后尽量使用外部私有存储下的两个方法。