单独使用的说完了,现在记录下调用的情况,这里调用传值就是用的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
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/213.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!