加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Android中C++调用Java达成

发布时间:2021-11-21 19:49:08 所属栏目:教程 来源:互联网
导读:1:需求分析 在Android中利用NDK进行编程的时候,一般的都是Java层通过JNI调用C++的相关接口,而在有的应用中,需要通过底层C++调用Java层来实现相关功能。比如在进行OMX硬解码画图的时候,需要在底层不断发送请求给Java层,让其不断刷新GlSurfaceView。 2:j

1:需求分析    
 
在Android中利用NDK进行编程的时候,一般的都是Java层通过JNI调用C++的相关接口,而在有的应用中,需要通过底层C++调用Java层来实现相关功能。比如在进行OMX硬解码画图的时候,需要在底层不断发送请求给Java层,让其不断刷新GlSurfaceView。
 
2:java层接口
 
  a://弹出消息对话框
 
  public static int 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一致。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读