android JNI java与C++交互篇(三)

整理来源:http://blog.csdn.net/qinning199/article/details/11750763


本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=97

本文目的

要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看如何完成它。

包括

你需要在你的项目中添加以下引用,原作者已经建立了一个在线项目。请确保在你的项目中包含文件了c++和Java,这里有个链接你可以查看一下:EasyNDK

 C++ 层面:

[cpp]  view plain  copy
  1.  #include "NDKHelper.h"   
  2.   
  3.  // 在cocos2dx中的按钮点击方法  
  4.  void HelloWorld::menuCloseCallback(CCObject* pSender)  
  5.  {  
  6.      //注册一个selector,那么当我们的native环境(java环境)调用这个字符串名字的函数(此处为名字为SampleSelector的函    数)的时候,这个selector可以响应请求  
  7.      //注意:设置组名是为了在析构函数中能够清除掉selector  
  8.     NDKHelper::AddSelector("HelloWorldSelectors",  
  9.                            "SampleSelector",  
  10.                            callfuncND_selector(HelloWorld::SampleSelector),  
  11.                            this);  
  12.   
  13.     // 为这个将要传递到native(也就是Java)语言中的消息设置参数  
  14.     // 在c++中发送要调用的函数名  
  15.     CCDictionary* prms = CCDictionary::create();  
  16.     prms->setObject(CCString::create("SampleSelector"), "to_be_called");  
  17.   
  18.     // 最后在当前环境(c++)中调用native方法  
  19.     SendMessageWithParams(string("SampleSelector"), prms);  
  20. }  
  21.   
  22. // 一个回调选择器,native语言(java)将会调用它  
  23. void HelloWorld::SampleSelector(CCNode *sender, void *data)  
  24. {  
  25.     CCLog("Called from native environment");  
  26. }  
  27.   
  28. // 析构函数移除掉HelloWorldSelectors中的选择器(selectors)  
  29. HelloWorld::~HelloWorld()  
  30. {  
  31.     // 移除相关联的选择器,因为我们将要销毁当前实例  
  32.     NDKHelper::RemoveSelectorsInGroup("HelloWorldSelectors");  
  33. }  


Java层面代码:

[cpp]  view plain  copy
  1. /** 当activity第一次被创建调用*/  
  2. public void onCreate(Bundle savedInstanceState)  
  3. {  
  4.     super.onCreate(savedInstanceState);  
  5.   
  6.     // 在主activity中,设置这个activity作为c++消息的接受者  
  7.     AndroidNDKHelper.SetNDKReciever(this);  
  8. }  
  9.   
  10. //实现这个被c++发送消息调用的方法  
  11. //确保这个方法的名字跟c++传递过来的字符串相同  
  12. // 比如我们从c++中传递"SampleSelector"字符串,这就是为什么我们创建这个方法的原因了  
  13. public void SampleSelector(JSONObject prms)  
  14. {  
  15.     Log.v("SampleSelector""传过来的参数是 : " + prms.toString());  
  16.   
  17.     String CPPFunctionToBeCalled = null;  
  18.     try  
  19.     {  
  20.         CPPFunctionToBeCalled = prms.getString("to_be_called");  
  21.     }  
  22.     catch (JSONException e)  
  23.     {  
  24.         // TODO Auto-generated catch block  
  25.         e.printStackTrace();  
  26.     }  
  27.   
  28.     AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  29.     builder.setMessage("这是一个android层中的popup").  
  30.     setTitle("Hello World!").  
  31.     setNeutralButton("OK", null).show();  
  32.   
  33.     // 发送带参数的消息,仅仅当selector列表中有这个相同名字的函数,c++才会接受这些消息,  
  34.     AndroidNDKHelper.SendMessageWithParameters(CPPFunctionToBeCalled, null);  
  35. }  


为了跟其他JavaSDK相连接,比如微博SDK,FaceBook SDK等,你可以按照这些sdk的java指导说明,实现这些消息,并传递接口到cocos2dx层面调用,使之成为你自己的SDK。在cocos2dx中。我已经通过这种方法实现了APPCircle,Flurry和很多其他的SDK。 其他

网上也有完整的源代码样例工程,下面是链接:

Sample Android Project


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值