I noticed that my app loses the files stored in the device storage after an update from the Market. I use openFileOutput() to fetch a directory to store my important files, as is specified here. I'd expect that these files would be kept between updates, but it does not seem to be the case, at least with Froyo. If this behavior is correct, how should I store my files in a manner that they won't be deleted after an update?
I noticed that my app loses the files stored in the device storage after an update from the Market.
All files are kept around on an upgrade. Files will be deleted if:
the user uninstalls the app
the user uses the Clear Data option in Settings
Also, if you change android:sharedUserId, your files are not deleted, but they will be owned by the previous user ID, meaning your app will be permanently messed up until the user unininstalls and reinstalls.
I'd expect that these files would be kept between updates
They are.
Related
Is there a possibility for iOS & Android to delete all data when uninstalling the mobile application? his does not mean the debug version of a developer on a test device. This scenario should be ensured.
iOS deletes all the data related to your app when the user uninstalls the app.
However, things are little different in Android. Before Android 11, you could have saved the data in device external storage which isn't deleted after uninstalling the app although the internal storage data (Android > data > com.xxx) is deleted.
But with Android 11, you don't need to worry about the external storage data anymore because you have no access to it and hence you can't store anything there. So, you're only left with the internal storage.
So, all the data will be deleted automatically when the user uninstalls the app.
This is done by the OS(Android/iOS) as all the data is deleted when the app is uninstalled.
In addition to this, you should check android:allowBackup and android:fullBackupContent options in your manifest file. Check more info here
If you want to also delete some files that we store in a folder on the sd card? You will not be able to, since those files are no longer your app files but just some files that the app uses and you can consider storing them in a different way.
I have an app that creates a directory for backup files on the external storage and automatically creates backup files when the user exits the app. One backup file per week is created and then one backup file that is overwritten all the time with latest info.
The backup files can't be located in getExternalFilesDir since they needs to survive that the user reinstalls the app.
I can't use MediaStorage because it's not an image or video.
I can't use Storage Access Framework to ask the user every time he exits the app to save a backup file.
So how to automatically create persistent backup files with the new Scoped Storage?
(I also need to list all created backup files, if the user wants to restore one of them.)
Backup is appropriate in the case when the user loses the device, buy new, install the app, login and get his data as they were.
Your question is looks like you try to leave on the user device something that he probably doesn't need, as far he deletes the app. If it's the general files like images, music, documents that many apps can view or edit - leave them there and do not care. If it's only your app data - they should live while your app is installed and die when the app is deleting.
It makes sense to back up to the cloud only. In case you don't need a personal server, here is the option: implement syncing with Dropbox or Google Drive. It's the best option just to update the app's data after each closing of the app using the service.
Is it possible to save some information at the device, if user deletes the application from his device? Something like a key-value (f.e. ("app id","date of installation")) which will not be removed?
Background: we are working on an application, which has an anonymous user for "exploring the app". This user should be removed, if user logs in. We can cover all cases, but not if user deletes the whole application. In iOS you can achieve this, by saving some values in the iOS-Keychain.
Any ideas or workarounds are welcome!
You have to save the data to some external file. So when you want to get the data you can read the data based on the file path.
Is it possible to save some information at the device, if user deletes the application from his device?
You can put stuff out on external storage in a place that will not be automatically deleted when your app is uninstalled (e.g., one of the roots supplied by Environment). However, the user can delete that file whenever the user wants.
Beyond that, there are no options, specifically so apps do not leave cruft behind that builds up and clutters up the user's device.
we are working on an application, which has an anonymous user for "exploring the app". This user should be removed, if user logs in.
It is unclear what this has to do with your original question.
How to check if the app is a fresh installation or a re installation. I want the user to have his history downloaded if its a re-installation like whats app. I thought of writing the user id in the shared preference but that is not possible as the data may get erased once the app is uninstalled. I am already having a folder of my app on the device which is used for image caching and downloading new images, but this is not reliable as the user may delete the folder. What else can I try ???
Obtain the user storage with getExternStorage, then leave a file there that specifies the usage history. The file you save there will survive uninstalls and reinstalls. Of course the user can delete that file but generally they will not, and if you name it properly they will realize it is part of a program.
I'd suggest you integrate with Android's Backup Service.
People switch phone every two years. Some factory reset their device. Some have more than one device. And some share their device with their kids. Linking a user history so that it follows a particular google account is the ideal way to go.
As to your question regarding Facebook integration, I'm afraid I know too little about that topic to be of any help.
I want to save some info regarding a trial version an application.
I want this info to be persistent in order to detect if the user removed the application and installed it again after the trial expiry.
what is the best place to store such info
thanks
Most of the times the solution to this problem is to keep an server side check,
But if you dont want to involve a server its better to give some limited functionality in your trail app and full in the paid version.
There are other methods too like Time Trial but again they all depends on persistent data so they also fails if the user uninstalls and installs again your applucation
Store it in external file.
it wont be deleted after user uninstalled the app.
but
Serverside check by Device ID is the good way ..
I'm working on the same "problem" at the moment (offline solution for trial time expired apps):
My findings: There is no way to ensure that a user never can reinstall & reuse a (time) trial app but there is a way to 'nearly' prevent it:
Use shared preferences / a database / file saved on internal storage containing the install timestamp.
If the device has an external storage card (most devices have) also save the timestamp on the sd card.
The only possiblity to use your application also after expiring is if the user 1. clears app data on the phone and 2. finds the timestamp file on the sd card and also kills this one.
If he "just kills" the first or second check the killed one can be restored on next app start.