单独使用的说完了,现在记录下调用的情况,这里调用传值就是用的JNI的方式,具体的JNI的使用方法可以查看下面的这个文章。

cocos2d-x中的jni的使用》》http://dongge.org/blog/cocos2d/177.html

如果有各种崩溃,可以使用ndk-stack,这里有ndk-stack使用方法》》http://dongge.org/blog/cocos2d/166.html

JAVA的函数

编译后,需要在proj.android项目中添加两个方法,一个是静态方法,获取类的实例对象,用来被c++调用,另一个是非静态方法,用来传值和操作等。
获取实例对象的方法:

private static Notice hiWorld = null;
//在create函数中使用
//hiWorld = this;
//给hiWorld这个实例复制

public static Object getJavaActivity() {
    	return hiWorld;
	}


传值和通知方法:

public void addNotice(String title,String content) {
		NotificationManager noticeMana=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
		Notification notice=new Notification(R.drawable.icon, "??", System.currentTimeMillis());
		Intent intent=new Intent(this, Cocos2dxActivity.class);
		PendingIntent pend=PendingIntent.getActivity(this, 0, intent, 0);
		notice.setLatestEventInfo(this, title, content, pend);
		noticeMana.notify(1, notice);
	}


然后这样在JAVA方面就已经写好了。

C++代码

在C++中使用JNI的方法调用JAVA中的方法,代码如下:

#include "AndroidNotice.h"
#include "cocos2d.h"
USING_NS_CC;
#if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#ifdef __cplusplus
extern "C"
{
#endif
    void addNotices(const char *title,const char *msg)
    {
        CCLOG("addnotice");
        JniMethodInfo t;
        jobject activityObj;
        //通过静态方法获取一个实例对象
        if(JniHelper::getStaticMethodInfo(t,"com/hu/Notice/Notice", "getJavaActivity","()Ljava/lang/Object;"))
        {
            activityObj = t.env->CallStaticObjectMethod(t.classID, t.methodID);
        }
       //通过实例对象调用实例方法,并且传值
        if(JniHelper::getMethodInfo(t,"com/hu/Notice/Notice", "addNotice","(Ljava/lang/String;Ljava/lang/String;)V"))
            
        {
            jstring jTitle = t.env->NewStringUTF(title);
            jstring jMsg = t.env->NewStringUTF(msg);
            t.env->CallVoidMethod(activityObj, t.methodID, jTitle, jMsg);
            t.env->DeleteLocalRef(jTitle);
            t.env->DeleteLocalRef(jMsg);
        }
    }
#ifdef __cplusplus
}
#endif
#endif


然后在相应的地方调用这个addNotices函数即可,这样就会通过c调用java中的通知和传值了

DEMO下载

最后提供下完整的demo,cocos2d-x的。

Github下载:https://github.com/DamonHu/Notice

GitOsc下载:http://git.oschina.net/DamonHoo/Notice


☟☟可点击下方广告支持一下☟☟

最后修改:1970 年 01 月 01 日
请我喝杯可乐,请随意打赏: ☞已打赏列表