歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中C++調用Java實現

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一致。

Copyright © Linux教程網 All Rights Reserved