easyar是国内开发的一款ar技术sdk,最近开发时遇到问题--- easyar 识别成功后,怎么回调java层代码(其实回调方法sdk应该给出,现在没有只能自己写了)?

很简单,改几个地方就行了

在Renderer.java

public void  onDrawFrame (GL10 gl) {
    MainActivity. nativeRender ( this ) ;
}

//此方法用来c层回调,输出c代码层的信息
public void  output (String out) {
    Log. i ( "zdbb" ,  "zdbb.. c代码回调: "  + out) ;
}

MainAtivity.java
public static native void  nativeRender (Object obj) ;

helloar.cc  (红色字体为关键)

extern  "C"  {
     JNIEXPORT  jboolean  JNICALL JNIFUNCTION_NATIVE (nativeInit(JNIEnv* env ,  jobject object)) ;
     JNIEXPORT  void  JNICALL JNIFUNCTION_NATIVE (nativeDestory(JNIEnv* env ,  jobject object)) ;
     JNIEXPORT  void  JNICALL JNIFUNCTION_NATIVE (nativeInitGL(JNIEnv* env ,  jobject object)) ;
     JNIEXPORT  void  JNICALL JNIFUNCTION_NATIVE (nativeResizeGL(JNIEnv* env ,  jobject object ,  jint w ,  jint h)) ;
     JNIEXPORT  void  JNICALL JNIFUNCTION_NATIVE (nativeRender(JNIEnv* env ,  jobject obj ,  jobject log ));
    JNIEXPORT void JNICALL JNIFUNCTION_NATIVE(nativeRotationChange(JNIEnv* env, jobject obj, jboolean portrait));
};

JNIEXPORT   void  JNICALL JNIFUNCTION_NATIVE (nativeRender(JNIEnv* env ,  jobject obj , jobject log) )
{
    ar.render(  env,  log ) ;
}

void  HelloARVideo ::render( JNIEnv* env, jobject obj )
{
    glClearColor( 0.f ,  0.f ,  0.f ,  1.f ) ;
     glClear( GL_COLOR_BUFFER_BIT  |  GL_DEPTH_BUFFER_BIT ) ;

Frame  frame =  augmenter_ .newFrame() ;
     if ( view_size [ 0 ]  >  0 ){
         AR ::resizeGL( view_size [ 0 ,  view_size [ 1 ) ;
         if ( camera_  &&  camera_ .isOpened())
             view_size [ 0 ]  = - 1 ;
     }
     augmenter_ .setViewPort( viewport_ ) ;
     augmenter_ .drawVideoBackground() ;
     glViewport( viewport_ [ 0 ,  viewport_ [ 1 ,  viewport_ [ 2 ,  viewport_ [ 3 ) ;

AugmentedTarget :: Status  status = frame.targets() [ 0 .status() ;
     if (status ==  AugmentedTarget :: kTargetStatusTracked ){
         int  id = frame.targets() [ 0 .target().id() ;

std :: string  idStr = frame.targets() [ 0 .target().uid() ;
         if ( active_target  &&  active_target  != id) {
             video ->onLost() ;
             delete  video ;
             video  =  NULL ;
             tracked_target  =  0 ;
             active_target  =  0 ;
         }
         if  (! tracked_target ) {
/*
*          回调java代码
*/             jclass cls = env->GetObjectClass(obj);
            jmethodID jmid = env->GetMethodID(cls, "output", "(Ljava/lang/String;)V");
            jstring info = env->NewStringUTF("你的选择没有错,我欠你的太多 ! ! ! ");
            env->CallVoidMethod(obj, jmid,info);
            jboolean  *jboolean1 = new jboolean(false);
            env->ReleaseStringUTFChars(info,env->GetStringUTFChars( info,jboolean1));

if  ( video  ==  NULL ) {
                 if (frame.targets() [ 0 .target().name()  ==  std :: string ( "argame" ) &&  texid [ 0 ]) {
                     video  =  new  ARVideo ;
                     video ->openVideoFile( "video.mp4" ,  texid [ 0 ]) ;
                     video_renderer  =  renderer [ 0 ;
                 }
                 else if (frame.targets() [ 0 .target().name()  ==  std :: string ( "namecard" ) &&  texid [ 1 ]) {
                     video  =  new  ARVideo ;
                     video ->openTransparentVideoFile( "transparentvideo.mp4" ,  texid [ 1 ]) ;
                     video_renderer  =  renderer [ 1 ;
                 }
                 else if (frame.targets() [ 0 .target().name()  ==  std :: string ( "idback" ) &&  texid [ 2 ]) {
                     video  =  new  ARVideo ;
                     video ->openStreamingVideo( "http://m21.oss-cn-qingdao.aliyuncs.com/1494836612692.mp4" , texid [ 2 ]) ;
                     video_renderer  =  renderer [ 2 ;
                 }

}
             if  ( video ) {
                 video ->onFound() ;
                 tracked_target  = id ;
                 active_target  = id ;
             }

}
         Matrix44F  projectionMatrix = getProjectionGL( camera_ .cameraCalibration() ,  0.2f ,  500.f ) ;
         Matrix44F  cameraview = getPoseGL(frame.targets() [ 0 .pose()) ;
         ImageTarget  target = frame.targets() [ 0 .target().cast_dynamic< ImageTarget >() ;
         if ( tracked_target ) {
             video ->update() ;
             video_renderer ->render(projectionMatrix ,  cameraview ,  target.size()) ;
         }
    }  else  {
         if  ( tracked_target ) {
             video ->onLost() ;
             tracked_target  =  0 ;
         }
    }
}

easyar 识别成功后,怎么回调java层代码相关推荐

  1. JNI通过线程c回调java层的函数

    1.参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2.参看博客: JNI层线程回调Java函数关 ...

  2. app接入支付宝后,支付成功后,回调不响应

    1.在支付时使用的是 [[AlipaySDK defaultService] payOrder: fromScheme: callback:^(NSDictionary *resultDic) { N ...

  3. PHP处理微信支付成功后的回调处理

    PHP处理微信支付成功后的回调处理 微信支付成功后我们可通过设置的回调地址中来处理 public function wx_notify(){$xml = file_get_contents(" ...

  4. html动态加载js方法,原生JS实现动态加载js文件并在加载成功后执行回调函数的方法...

    本文实例讲述了原生JS实现动态加载js文件并在加载成功后执行回调函数的方法.分享给大家供大家参考,具体如下: 有的时候需要动态加载一个javascript文件,并且在加载成功后执行回调函数(例如文件中 ...

  5. 微信支付回调页面html,微信JSAPI支付成功后获取回调数据

    微信JSAPI公众号支付是素材火群主提供的,支付成功后跳转到订单详情页,里面是微信支付成功后回调的数据,由第三方微信支付平台定时请求获取. 下载资源 下载积分: 780 积分 回调地址notify.p ...

  6. 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(上)

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html ☞ ...

  7. ajax删除成功后的回调,Ajax成功回调'删除'不触发在Firefox中

    我有一个测试页面使用Ajax来向服务器发出一个http'删除'请求.以下JS代码在IE7中按照预期工作,但在Firefox中不起作用(除非我使ajax调用异步).Ajax成功回调'删除'不触发在Fir ...

  8. QQ分享成功后也回调onCancel()

    做了一个QQ分享,都分享成功了,但在回调的时候却出问题了.不管是成功或者取消都回调onCancel()方法. 经常查资料和测试,原来是 Tencent.createInstance(你的ID, mCo ...

  9. 微信分享到朋友圈onMenuShareTimeline成功后的回调函数在某系ios手机下不执行的问题...

    以下代码放入success内,setTimeout(function(){ //回调要执行的代码 }, 500); 转载于:https://www.cnblogs.com/liyuchen/p/903 ...

最新文章

  1. springmvc+spring+hibernate集成cxf
  2. 小程序获取设备信息以及实现短信验证码登录
  3. Realm的入门使用
  4. 必做作业3:原型化系统
  5. AD命令获取计算机、用户相关信息
  6. (C++)String的用法
  7. IIS7.5应用程序池集成模式和经典模式的区别介绍
  8. 百度编辑器UEditor的使用方法
  9. 闲聊:Android 平台网络游戏加速器·一(科普文)
  10. 兄弟7180dn拆机_兄弟DCP-7010拆机图解
  11. lvds接口屏线安装图解_液晶屏上的LVDS,TTL,RSDS三种接口的详解
  12. 整流五 - PWM整流器无差拍控制 一(重复控制算法)
  13. windows资源管理器经常出现无响应 window语言栏不见了
  14. 【图】max51开发板(手工焊接)
  15. macOS Monterey 如何设置PPT演讲者模式实现电脑看备注投影看播放内容
  16. 简单数据类型的转换和条件控制语句(if else)的使用
  17. 基于微信小程序电影交流平台源码成品(微信小程序毕业设计)
  18. matlab归一化和标准化
  19. 实验三 面向对象分析与设计
  20. JAVA配置多源数据库

热门文章

  1. Unity 中的 IL2CPP
  2. AndroidStudio XML文件之style标签详解
  3. Android studio提示error:module not specified
  4. Android一步步实现无痕埋点(5)-------斗转星移
  5. 想学IT的必看!如何才能通过一线互联网公司面试?面试必问
  6. 也谈鼠标Logicool G9
  7. Gram-Schmidt orthogonalization/斯密特正交化代码实现-Go语言
  8. TOX ZP 20/000-ZP20/000
  9. 苹果的Safari已成为新的IE浏览器
  10. 人工智能来袭,银行柜台你还去吗