c++代碼
//
// LuaTool.cpp
// TangRenJie
//
// Created by mac on 16/4/6.
//
//
#include "JniUtil.h"
#include "cocos2d.h"
#include "CCLuaEngine.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#endif
using namespace cocos2d;
// 應用計費點id priciePointId
// 計費點對應的金額 money
// 渠道號 qd
//c++調用java
void sendPayInfo(const char * priciePointId,const char * money,const char * qd)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
cocos2d::JniMethodInfo minfo;//定義Jni函數信息結構體
//getStaticMethodInfo 次函數返回一個bool值表示是否找到此函數
const char * jniClass = "org/cocos2dx/lua/AppActivity";//這裏寫你所要調用的java代碼的類名
bool isHave = JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/lua/AppActivity","sdkpay","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");//本人在此傳遞的參數是字符串
if (!isHave) {
CCLog("jni->%s/callJni:此函數不存在", jniClass);
}else{
CCLog("jni->%s/callJni:此函數存在", jniClass);
jstring jpriciePointId = minfo.env->NewStringUTF(priciePointId);
jstring jmoney = minfo.env->NewStringUTF(money);
jstring jqd = minfo.env->NewStringUTF(qd);
//調用此函數
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jpriciePointId,jmoney,jqd);
}
CCLog("jni-java函數執行完畢");
#endif
}
//java調用c++extern "C"
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
//方法名與java類中的包名+方法名,以下劃線連接
void Java_org_cocos2dx_lua_AppActivity_paycallbacktoapp(JNIEnv* env, jobject thiz, jint code)
{
CCLog("java回調 sayHello onreceivemsg c++ %d",code);
LuaEngine::getInstance()->getLuaStack()->pushInt(code);
LuaEngine::getInstance()->executeGlobalFunction("onreceivemsg",1);
}
#endif
}
//#endif // #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
//java代碼
//c++調用
public static void sdkpay(String mpriciePointId, String mmoney, String mqd)
{}
//java調用
paycallbacktoapp(msg.what);
如果接入過程中 需要用到AppActivity.this 可在開始的時候 聲明一個靜態變量,在oncrate()中複製this
private static AppActivity m_app = null;
m_app = this