单独使用的说完了,现在记录下调用的情况,这里调用传值就是用的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&nbsp;static&nbsp;Notice&nbsp;hiWorld&nbsp;=&nbsp;null;

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

public static Object getJavaActivity() {
     return hiWorld;

}</pre><p><br/></p><p>
传值和通知方法:</p><pre class="prettyprint lang-java linenums">public&nbsp;void&nbsp;addNotice(String&nbsp;title,String&nbsp;content)&nbsp;{
    NotificationManager&nbsp;noticeMana=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    Notification&nbsp;notice=new&nbsp;Notification(R.drawable.icon,&nbsp;&quot;??&quot;,&nbsp;System.currentTimeMillis());
    Intent&nbsp;intent=new&nbsp;Intent(this,&nbsp;Cocos2dxActivity.class);
    PendingIntent&nbsp;pend=PendingIntent.getActivity(this,&nbsp;0,&nbsp;intent,&nbsp;0);
    notice.setLatestEventInfo(this,&nbsp;title,&nbsp;content,&nbsp;pend);
    noticeMana.notify(1,&nbsp;notice);
}</pre><p><br/></p><p>
然后这样在JAVA方面就已经写好了。</p><h2>
C++代码</h2><p>
在C++中使用JNI的方法调用JAVA中的方法,代码如下:</p><pre class="prettyprint lang-cpp linenums">#include&nbsp;&quot;AndroidNotice.h&quot;

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>
Last modification:January 1st, 1970 at 08:00 am
如果觉得我的文章对你有用,请随意打赏: ☞已打赏列表