单独使用的说完了,现在记录下调用的情况,这里调用传值就是用的JNI的方式,具体的JNI的使用方法可以查看下面的这个文章。
cocos2d-x中的jni的使用》》<a href="http://www.hudongdong.com/cocos2d/177.html" target="_blank">http://www.hudongdong.com/cocos2d/177.html</a> </p><p>
如果有各种崩溃,可以使用ndk-stack,这里有ndk-stack使用方法》》<a href="http://www.hudongdong.com/cocos2d/166.html" target="_blank">http://www.hudongdong.com/cocos2d/166.html</a> </p><h2>
JAVA的函数</h2><p>
编译后,需要在proj.android项目中添加两个方法,一个是静态方法,获取类的实例对象,用来被c++调用,另一个是非静态方法,用来传值和操作等。<br/>获取实例对象的方法:</p><pre class="prettyprint lang-java linenums">private static Notice hiWorld = null;
//在create函数中使用
//hiWorld = this;
//给hiWorld这个实例复制
public static Object getJavaActivity() {
return hiWorld;
}</pre><p><br/></p><p>
传值和通知方法:</p><pre class="prettyprint lang-java linenums">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);
}</pre><p><br/></p><p>
然后这样在JAVA方面就已经写好了。</p><h2>
C++代码</h2><p>
在C++中使用JNI的方法调用JAVA中的方法,代码如下:</p><pre class="prettyprint lang-cpp linenums">#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
<br/>
然后在相应的地方调用这个addNotices函数即可,这样就会通过c调用java中的通知和传值了</p><h2>
DEMO下载</h2><p>
最后提供下完整的demo,cocos2d-x的。</p><p>Github下载:<a href="https://github.com/DamonHu/Notice" target="_blank">https://github.com/DamonHu/Notice</a></p><p>GitOsc下载:<a href="http://git.oschina.net/DamonHoo/Notice" target="_blank">http://git.oschina.net/DamonHoo/Notice</a></p>
版权属于:胡东东博客
本文链接:http://blog.hudongdong.com/cocos2d/213.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
☟☟如文章有用,可点击一次下方广告支持一下☟☟