[C++] Ouvrir le navigateur depuis Cocos2d-x

Il fallait que j’intègre des boutons dans un projet cocos2d-x pour rediriger sur des pages de réseaux sociaux. Mais à mon grand regret, il n’existe pas de fonction préparée dans le framework de cocos2d-x (version 3.2) pour ouvrir une page de navigateur. Il m’a alors fallu l’implémenter moi-même.

Content.

Fort heureusement, des personnes se sont déjà penchées sur la question et une source m’a été particulièrement utile. Pour info, ce qui va suivre pourrait aussi servir à ouvrir des fichiers en local (file://) ou toute ressource pointable par un URI (tant qu’il y a un logiciel qui peut gérer cet URI, of course) ! Mes chers lecteurs francophones (parce qu’aucun anglophone ou autre ne viendrait ici huhu), voici un récapitulatif :

Partie Windows

  • cocos/platform/win32/CCApplication.h
    void Application::openURL(const char* url); // à ajouter parmi les membres publics
    
  • cocos/platform/win32/CCApplication.cpp
    /* Opens URL in browser. */
    void Application::openURL(const char* url)
    {
    	ShellExecuteA(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL);
    }
    

Partie Android

  • cocos/platform/android/CCApplication.h
    void Application::openURL(const char* url); // à ajouter parmi les membres publics
    
  • cocos/platform/android/CCApplication.cpp
    /* Opens URL in browser. */
    void Application::openURL(const char* url)
    {
    	JniMethodInfo minfo;
    
    	if (JniHelper::getStaticMethodInfo(minfo,
    		"org/cocos2dx/lib/Cocos2dxActivity",
    		"openURL",
    		"(Ljava/lang/String;)V"))
    	{
    		jstring StringArg1 = minfo.env->NewStringUTF(url);
    		minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, StringArg1);
    		minfo.env->DeleteLocalRef(StringArg1);
    		minfo.env->DeleteLocalRef(minfo.classID);
    	}
    }
    
  • cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java
    • À ajouter dans les imports si ce n’est pas déjà fait :
      import android.net.Uri;
      
    • À ajouter dans la classe Cocos2dxActivity :
      public static void openURL(String url) {
      	Intent i = new Intent(Intent.ACTION_VIEW);
      	i.setData(Uri.parse(url));
      	sContext.startActivity(i);
      }
      

Partie iOS (quand j’en aurai besoin :P)

Conclusion

Et voilà ! Désormais, pour ouvrir la page, appelez la méthode openUrl ainsi :

CCApplication::getInstance()->openUrl("http://www.example.com");

Published by Dakwamine

Dakwamine, alias Quang-Minh Dang, né en 1987 en région parisienne. Un type sympa, pas bavard et pragmatique.