First of all I have done a search and can't find a specific answer to my question so here goes...
I am writing my first Android application and plan to have a Lite version (limited features) and a paid version (full features).
The Lite and Pro version will use the same SQLite database structure, and if the user starts with the Lite version and upgrades to the Pro version, I dont want them to lose the data they have created in the Lite version.
As the Lite and Pro versions will (from my understanding) have to be in separate packages to allow the Android Market to distinguish between them, how can the Pro version see the Lite database?
Many thanks in advance for your answers.
You might want to do more of an "unlock" approach than a separate paid app if possible. That way you're only ever using one package. If for no other reason, you'll be avoiding the issue of database ownership.
Using the same
android:sharedUserId
would be a good approach if your app already has one set. If not, you'll invalidate access to all of your users' data if you send out an update that does have one set. If you're starting from square zero and don't already have an app in the wild with users expecting to keep their data, definitely set asharedUserId
from day one.What I did in and it seems to work for Hexaddicus, is have both Lite and Pro versions run as the same user and then on the first time run of the Pro version, copy the Lite database over. Then inform the user of the copy.
Set the
android:sharedUserId
to be the same in both products...And then the code to copy the DB...
The only downside of this is that once the copy is done, there is no syncing between the two versions. You also have to make sure that the user of the Lite version is running a version that is running as the
sharedUserId
or the copy will fail.Update: please consider ChrisCashwells comments and answer too since he brings up a valid point and I can't remember what I did in his example.
As @Chris told that you can use "unlock" approach, i will explain it how i do in such conditions.
You can have a table like 'Features' should have have a column/flag IsAvailable. If you want to restrict certain features you can set its IsAvailable flag to FALSE.
If you have changes in DB structure, then you should upgrade the DB using: