It'd be convenient if an application I'm writing stored some files to external storage permanently (so they persist after the application has been exited[destroyed]), but on an uninstall I'd like to do the decent thing and have these files removed to free up the storage.
Is there any way I can have these files removed on an uninstall?
If there isn't (and I'm skeptical), then I'll have to create these files each time. I'm trying to save start-up time and also occupy required space by having them exist permanently.
Note: I need to use external storage, so both internal storage or a DB would be inappropriate.
Yes, this is possible. Simply write your files to the external files directory:
This will create a folder at /Android/data/your.package/. Note that this is not External as in sdcard, but it is publicly accessible. If a user uninstalls your app, this directory will also be removed, along with all of its contents.
Quoting from the blog post of CommonsWare
Internal storage: your file is deleted
External storage: if you wrote your file to a location rooted at
getExternalFilesDir()
orgetExternalCacheDir()
, your file is deleted. If you wrote your file elsewhere (e.g.,Environment.getExternalStoragePublicDirectory()
), your file is not deletedRemovable storage, prior to Android 4.4: removable storage is not officially accessible; if your file winds up out there, it should not be deleted when your app is uninstalled
Removable storage, Android 4.4+: AFAIK, if you write to a supported location (
getExternalFilesDirs()
orgetExternalCacheDirs()
), your file is deleted if that particular bit of removable storage is in the device at the time of uninstallNo, I don't believe so. Only files that you write to internal storage will be removed when your application is uninstalled (or if the user presses the 'clear data' button in the Application settings app).
Your app can't receive its own
PACKAGE_REMOVED
broadcast intent either, so you essentially have no notification that you're being uninstalled.actually it is possible .
android will automatically remove files of the app in the external storage , but the files must be inside a specific path of the app :
"...../Android/data/APP_PACKAGE_NAME/"
where APP_PACKAGE_NAME is the application's package name. another path that is automatically being emptied is :
"...../Android/obb/APP_PACKAGE_NAME/" where APP_PACKAGE_NAME is the application's package name.
the data is for anything you wish. the obb folder is for huge files that are downloaded using the play-store and the apk extension library . you are not supposed to create files there .