намерение Android — Google Play Services C ++ / запуск интерфейса при втором действии с использованием IntentHandler

Я занимаюсь разработкой мобильной игры с использованием движка Cocos2D-x для платформы Android и хочу интегрировать в нее GPGS.
Мне удалось показать списки лидеров, но есть небольшая досадная проблема. Когда отображается таблица лидеров, если я захожу в фон, а затем возвращаюсь в приложение, игровая сцена становится черной. Я думаю, что контекст opengl выпущен и не восстанавливается снова. По моему мнению, это приводит к тому, что при запуске таблицы лидеров на одной и той же активности движок игры не может понять, что там происходит. Как бы то ни было, из-за этого я хочу запустить таблицу лидеров (а также все вещи GPGS) в новом действии, используя намерение.

Google любит «Предоставление»
В справочных документах Google Play Game Services C ++ SDK есть несколько неясных / нечетких объяснений использования метода SetOptionalIntentHandlerForUI.

«Предоставить функцию, которая может запустить предоставленное намерение пользовательского интерфейса в любой точке, используя startActivityForResult».

Что означает «Предоставление»? Что такое заданное намерение? Как я буду использовать метод startActivityForResult? К сожалению, «использование» и «предоставление методов» не являются четкими выражениями для кодирования. Там нет образца о
используя этот метод в документах GPGS для C ++. В конце концов,
Документ Google настолько беден и
в интернете нет полезной информации. Если кто-то из Google поможет мне, я буду так счастлив.

Как я понимаю, я написал такой код. Но выдает ошибку при запуске.

AppActivity.java

public void runGPGSActivity(Intent i) {
startActivityForResult(i,100);
}

AndroidPlatformConfiguration.h (из C ++ gpg lib)

typedef std::function<void(jobject)> IntentHandler;

AndroidPlatformConfiguration &SetOptionalIntentHandlerForUI(
IntentHandler intent_handler);

main.cpp (JNI-привязка, рабочий код, GPGS работает на той же активности)

gpg::AndroidPlatformConfiguration platform_configuration;
platform_configuration.SetActivity(activity);
StateManager::InitServices( ...

main.cpp (JNI-привязка, GPGS должен быть запущен при новой активности)

gpg::AndroidPlatformConfiguration platform_configuration;

jclass activityClass = env->FindClass("org/cocos2dx/cpp/AppActivity");
jmethodID jIntentHandlerMethodID = env->GetMethodID(activityClass,"runGPGSActivity","(Landorid/content/Intent;)V");
jobject jIntentHandler = env->NewObject(activityClass, jIntentHandlerMethodID);

gpg::AndroidPlatformConfiguration::IntentHandler mIntentHandler; /*= [](jobject mjIntentHandler){};*/
std::function<void(jobject)> intentHandler = std::bind(mIntentHandler,jIntentHandler);

platform_configuration.SetOptionalIntentHandlerForUI(intentHandler);
platform_configuration.SetActivity(activity);

StateManager::InitServices(

Нет ошибки сборки, но приложение вылетает при запуске.

03-24 14: 12: 24.301: A / libc (21352): фатальный сигнал 6 (SIGABRT) при
0x00005368 (код = -6), резьба 21352 (основная)

И некоторые ссылки на эту проблему:

IntentHandler ссылка

Ссылка StartActivityForResult

/// Заранее спасибо. ///

0

Решение

…Да, я решил проблему, но не использовал метод IntentHandler.

Я использовал этот код в своем приложении, чтобы показать еженедельные данные списка лидеров.

gameServices->Leaderboards().ShowUIBlocking(leaderboardId,gpg::LeaderboardTimeSpan::WEEKLY);

Но возвращаемое значение не является недействительным, это UIStatus (что бы это ни было)

Я вернулся к этому коду, приложение не переходит на черный экран. Этот метод возвращает void, я думаю, что мне нужно перехватить некоторые обратные вызовы при использовании метода ShowUIBlocking с этим UIStatus.

gameServices->Leaderboards().ShowUI(leaderboardId);

Но сейчас я не могу извлечь выгоду из функции временной шкалы лидеров.

Я собираюсь исследовать, как это может быть использовано. На данный момент проблем нет. Но документация SetOptionalIntentHandlerForUI должна быть написана более явно для программистов, которые хотят ее использовать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]