Removable storage adoption
Android Marshmallow allows users to adopt external storage devices, such as SD cards. Such adoptions will format and encrypt the storage device and mount it as internal storage. Once done, users can move apps and apps' private data between storage devices. The android:installLocation
preference in the manifest will then be used by the system to determine the available locations for each app. What you need to keep in mind is that using Context
methods for directories or files and ApplicationInfo
fields will return values that can change between runs. You should always call these APIs dynamically. Don't use hardcoded file paths or persist fully qualified file paths.
The
Context
methods are as follows:
getFilesDir()
getCacheDir()
getCodeCacheDir()
getDatabasePath()
getDir()
getNoBackupFilesDir()
getFileStreamPath()
getPackageCodePath()
getPackageResourcePath()
The
ApplicationInfo
fields are as follows:
dataDir
sourceDir
nativeLibraryDir
publicSourceDir
splitSourceDirs...