Android
iOS
cocos2d-x

cocos2d-x AndroidとiOSでブラウザを起動する方法

More than 3 years have passed since last update.

この記事を自分向けにしたものです。

新しいファイルを作らなくてよいので楽かなと…

対象

  • cocos2d-x 3.2.0
  • Xcode 6.1
  • Eclipse Juno (Android Developer Tools)

iOS対応

cocos2d_libs.xcodeprojの次のファイルを編集します。

platform/ios/CCApplication

// CCApplication.h

class CC_DLL Application : public ApplicationProtocol {

public:
  void openURL(const char* url);

};
// CCApplication.mm
void Application::openURL(const char *urlStr) {
    NSString* str = [NSString stringWithUTF8String:urlStr];
    NSURL* url = [NSURL URLWithString:str];
    [[UIApplication sharedApplication] openURL:url];
}

Android対応

cocos2d/cocos/platform/androidの以下のファイルとsrcのjavaファイルを編集します。

// CCApplication.h

class CC_DLL Application : public ApplicationProtocol {
  virtual void openURL(const char* pszUrl);
};

// CCApplication.cpp

void Application::openURL(const char* pszUrl) {
    JniMethodInfo minfo;
    if(JniHelper::getStaticMethodInfo(minfo,
        "org/cocos2dx/cpp/AppActivity",
        "openURL",
        "(Ljava/lang/String;)V"))
    {
        jstring StringArg1 = minfo.env->NewStringUTF(pszUrl);
        minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, StringArg1);
        minfo.env->DeleteLocalRef(StringArg1);
        minfo.env->DeleteLocalRef(minfo.classID);
    }
}
// /src org.cocos2dx.cpp.AppActivity.java

public class AppActivity extends Cocos2dxActivity {

private static AppActivity me = null;

    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        me = this;   // => added!
    }

    public static void openURL(String url) { 
        Intent i = new Intent(Intent.ACTION_VIEW);  
        i.setData(Uri.parse(url));
        me.startActivity(i);
    }
}

利用例

// SampleScene.cpp

void SampleScene::tapped(Ref* pSender) {
  Application::getInstance()->openURL("http://www.abc.def/~~~");
}