单独使用的说完了,现在记录下调用的情况,这里调用传值就是用的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://blog.dongge.org/213.html
本文采用知识共享署名4.0 国际许可协议进行许可。转载或大段使用必须添加本文链接,否则您将构成侵权!
微信公众号: 东哥org
