Очевидно, я не могу комментировать без 50 репутации, поэтому я добавлю это в свой ответ.
Метод PackageManager, на который ссылаются другие, кажется хорошим и простым способом, но, как отмечает хакбод, наличие двух установленных приложений раздражает (и немного сбивает с толку) пользователя.
Однако - и я не пробовал этого, потому что я еще не опубликовал свое приложение - кажется, что вы можете оставить переменную, которая начинается с false, а затем обновляется до true, если она находит установленную версию Pro. Переменная не вернется к ложному только потому, что версия Pro не существует. Затем вы можете сообщить пользователю в обеих версиях, что ему нужно установить Pro, затем открыть пробную версию и нажать «Разблокировать». Как только это будет сделано, пробная версия станет полной версией и сообщит вам (если обнаружится, что версия Pro установлена), что теперь вы можете удалить версию Pro и у вас будет полный доступ.
Что-то вроде этого:
String msg = "";
boolean sigMatch = isProInstalled(context);
if (unlocked)
{
// If you get here by clicking a button that goes away once the app is unlocked, then you may never see this. Still, better safe than sorry.
msg += "Thanks! You already have access to the full game.";
}
else
{
if (sigMatch)
{
unlocked = true;
saveData(); // I assume you already know how to store variables.
msg += "Unlock successful. You now have access to the full game."
}
else
{
msg += "You are using a Trial version of this game. (blah, blah). To unlock the full version, please purchase XYZ Pro. Install the application and then start this application again and go into this screen again. You should get a message letting you know that the app has been successfully unlocked, after which you may uninstall the Pro version. You do not have to keep it on your device after unlocking the game.";
}
}
if (sigMatch)
{
msg += " If you like, you may now uninstall the Pro application. You will continue to have full access to XYZ.";
}
Теперь, это не может сказать вам, заплатил ли пользователь за версию Pro, а затем вернул ее в течение 24 часов, как возможно, также упоминал hackbod. ** Но кажется, что этот сценарий может случаться не очень часто. Если кто-то заплатил, а затем вернул его (особенно если вы не слишком много заряжаете), то он, вероятно, решил прекратить использовать приложение ... или они пытаются украсть его, и в этом случае есть другие способы сделать это в любом случае. Если эта возможность касается вас, то биллинг в приложении может быть вашим лучшим выбором. Но если вы ищете только простую меру, чтобы не пускать случайных пользователей, и не хотите заставлять их постоянно устанавливать два приложения, тогда это может быть вариант.
** Я полагаю, вы могли бы сохранить временную метку с другой переменной и потребовать от пользователя держать версию Pro установленной до истечения определенного количества часов после этой временной метки, ПОТОМ чтобы они могли удалить ...