cpp调用java

 

 

0.引进头文件

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include<jni.h>

#include"platform/android/jni/JniHelper.h"    //引不到JniHelper.h

#include "JniHelper.h"                                 //编译不能通过

#include<android/log.h>

 

#endif

 

1.传递两参数 string类型并且返回一个 string类型

 

包名org/play/test/、类名CaddCall

void HelloWorld::menuCloseCallback(CCObject* pSender) {
	bool isHave;
	const char* msgRet;
	JniMethodInfo minfo;
	const char* fileName = "testWei"; //产品id
	const char* imageName = "testWei";

	//包名org/play/test/、类名CaddCall
	isHave = JniHelper::getStaticMethodInfo(minfo, "org/play/test/CaddCall",
			"googlePlay",
			"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");

	if (isHave) {
		jstring jTitle = minfo.env->NewStringUTF(fileName);
		jstring jTitle1 = minfo.env->NewStringUTF(imageName);
		jobject obj = minfo.env->CallStaticObjectMethod(minfo.classID,
				minfo.methodID, jTitle, jTitle1);

		jstring jRet = (jstring) obj;
		msgRet = (minfo.env)->GetStringUTFChars(jRet, NULL);
	}

	if (std::string(msgRet) == "1")
		CCMessageBox("1", "1");
	else
		CCMessageBox("0", "0");

}

  

启动类:继承extends Cocos2dxActivity的类

  (1)通过单例的static方法访问,启动类的非static方法

类CaddCall

CaddCall.acty:CaddCall类public  static  APlay  acty;  在xxx类onCreat...时候 CaddCall.acty = this;这个时候在static方法中就能调用xxx类的非static方法了

public static String googlePlay(final String protuctId, String imagePath) {
		CaddCall.acty.onBuyGasButtonClicked();
		return CaddCall.retResult;
	}

 

 注:通过这种方法也解决了,c++通过jni调用java的非static方法

 

(2)通过通知(Handler)访问,启动类的非static方法

 启动类

public Handler mHandler = new Handler() {//注册通知
		public void handleMessage(Message msg) {//等待对方相应这个通知
			switch (msg.what) {
			case CaddCall.SHOW_DIALOG://通知名字
				onBuyGasButtonClicked(); //调用非static方法
				break;
			}
		}
	};

 

publicstatic XXX启动类 acty;

 在启动类的onCreate 调用 CaddCall.acty = this(告诉CaddCall里的发送通知的方法,给那个类发送通知);

 

public static final int SHOW_DIALOG = 0x0001;
	public static APlay acty;
	private static Handler mHandler;//通知
	public static void init(Handler handler) {
		CaddCall.mHandler = handler;
	}
public static String googlePlay(final String protuctId, String imagePath) {
		 Message msg = mHandler.obtainMessage();//得到消息
		 msg.what = CaddCall.SHOW_DIALOG;//得到消息线路
		 msg.sendToTarget();//发送
		
		return “”;		
	}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(ios)