首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Android中C++调用Java兑现

2013-03-27 
Android中C++调用Java实现1:需求分析在Android中利用NDK进行编程的时候,一般的都是Java层通过JNI调用C的相

Android中C++调用Java实现
1:需求分析     

   在Android中利用NDK进行编程的时候,一般的都是Java层通过JNI调用C++的相关接口,而在有的应用中,需要通过底层C++调用Java层来实现相关功能。比如在进行OMX硬解码画图的时候,需要在底层不断发送请求给Java层,让其不断刷新GlSurfaceView。

 

2:java层接口

   a://弹出消息对话框

  public staticint showMessage(Stringtitle,String val)

   {       

       newAlertDialog.Builder(m_scMnCtx)

       .setTitle(title)

       .setMessage(val)

       .setPositiveButton("确定",

          new DialogInterface.OnClickListener(){

           publicvoidonClick(DialogInterface dialoginterface,int i){

               }}).show();

        return 0;

  }

   其中参数title为标题,val为消息内容。

   b: native方法

   publicnativestaticint testCallBack(Stringtitle,String val)

3:JNI层接口

/*

 * Class:     org_yao_ndk_NDKTest

 * Method:    testCallBack

 * Signature: (Ljava/lang/String;Ljava/lang/String;)I

 */

JNIEXPORT jint JNICALLJava_org_yao_ndk_NDKTest_testCallBack

 (JNIEnv *env, jclass obj, jstringtitle, jstring val)

{

   jmethodID java_method =env->GetStaticMethodID(obj,"showMessage","(Ljava/lang/String;Ljava/lang/String;)I");

   if(java_method == 0)

   {

      return 0;

   }

   env->CallStaticIntMethod(obj,java_method,title,val);

   return 1;

}

   其中,GetStaticMethodID获取java中静态方法的ID,obj为方法所在的类,showMessage为Java层接口名,"(Ljava/lang/String;Ljava/lang/String;)I"其中括号里面对应native方法testCallBack输入参数,外面为返回参数,可以参考/*Signature*/注释信息。在获取到方法ID以后就可以用CallStaticIntMethod来调用Java层接口showMessage了。其中CallStaticIntMethod中Int要和publicnative static int testCallBack(String title,String val)中int一致。

4:调用实现

   //为btnShow(C++调用Java)Button加入监听事件

   btnShow.setOnClickListener(newView.OnClickListener() { 

   @Override

      publicvoid onClick(View v) {

        // TODO Auto-generatedmethod stub

        //单击btnShow,弹出消息对话框

         NDKTest.testCallBack("test","It is C++ call Java testing");

          }

      });

   这里先通过Java调用C++接口testCallBack,然后在testCallBack中,实现调用Java层接口showMessage,实现Java和C++的互调。当然直接调用Java接口showMessage更简单。

5:测试结果

     Android中C++调用Java兑现

 

 

热点排行