Использование примера Android InApp Billing V3. Нажмите кнопку "Купить", "Назад" и "купить" снова вызывает ошибку

Здесь шаги:

  • Создайте и запустите пример Trivial Drive для InApp V3
  • Выберите вариант покупки
  • Нажмите кнопку "Назад"
  • Попробуйте снова купить

В версии с января 2013 года вы, возможно, получите

Не удается запустить асинхронную операцию (launchPurchaseFlow), поскольку другой асинхронный выполняется операция (launchPurchaseFlow).

Тогда вы не можете использовать методы покупки или инвентаризации класса IabHelper, так как флаг async не будет очищен, если вы не убьете свое приложение.

Здесь возможно решение:

Я сделал метод flagEndAsync общедоступным и вызвал его в методе onRestart. Вопросы: это безопасное решение? И кто-нибудь еще видел эту проблему?

Вот что я добавил:

protected void onRestart() {
    super.onRestart();
    if (mHelper != null) mHelper.flagEndAsync();
}

Ответ 1

Вы уверены, что не удалили следующий код (или забыли добавить в свою активность).

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Pass on the activity result to the helper for handling
        if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
            // not handled, so handle it ourselves (here where you'd
            // perform any handling of activity results not related to in-app
            // billing...
            super.onActivityResult(requestCode, resultCode, data);
        }
    }