2017-08-29 32 views
0

我正在用Tango編寫一個應用程序,並得到一個奇怪的錯誤。
我的程序已成功連接到探戈服務,並設置了一個回調「mTango.connectListener(framePairs,new Tango.TangoUpdateCallback(){...});」,但我無法獲取任何探戈數據,因爲回調從未被調用過。
這裏是我的主要代碼回調不被稱爲

private void bindTangoService() { 
    Log.d(TAG, "正在綁定Tango 服務"); 
    if (mIsConnected) { 
     return; 
    } 
    mTango = new Tango(mContext, new Runnable() { 
     @Override 
     public void run() { 
      synchronized (TangoAR.this) { 
       try { 
        mConfig = setupTangoConfig(mTango, false, false); 
        mTango.connect(mConfig); 
        startupTango(); 
        TangoSupport.initialize(mTango); 
        mIsConnected = true; 
        onRotationUpdated(Util.getDisplayRotation(mContext)); 
        makeToast("tango 連接成功"); 
        Log.d(TAG, "tango 連接成功"); 
       } catch (TangoOutOfDateException e) { 
        makeToast("TangoOutOfDateException"); 
       } catch (Throwable e) { 
        makeToast(e.getMessage()); 
       } 
      } 
     } 
    }); 
} 

private TangoConfig setupTangoConfig(Tango tango, boolean isLearningMode, boolean isLoadAdf) { 
    Log.d(TAG, "setupTangoConfig"); 
    TangoConfig config = tango.getConfig(TangoConfig.CONFIG_TYPE_DEFAULT); 
    //在tango連接後使用相機必須使用true 
    config.putBoolean(TangoConfig.KEY_BOOLEAN_COLORCAMERA, false); 
    //motion 
    config.putBoolean(TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true); 
    config.putBoolean(TangoConfig.KEY_BOOLEAN_AUTORECOVERY, true); 
    config.putBoolean(TangoConfig.KEY_BOOLEAN_DRIFT_CORRECTION, true); 
    //depth 
    config.putBoolean(TangoConfig.KEY_BOOLEAN_DEPTH, true); 
    config.putBoolean(TangoConfig.KEY_BOOLEAN_LOWLATENCYIMUINTEGRATION, true); 
    config.putInt(TangoConfig.KEY_INT_DEPTH_MODE, TangoConfig.TANGO_DEPTH_MODE_POINT_CLOUD);//使用點雲,不使用老版本的TANGO_DEPTH_MODE_XYZ_IJ 

    //area learning 
    if (isLearningMode) { 
     //區域學習需要權限授權 
     if (checkAndRequestTangoPermissions(Tango.PERMISSIONTYPE_ADF_LOAD_SAVE)) { 
      Log.d(TAG, "PERMISSIONTYPE_ADF_LOAD_SAVE 開啓"); 
      config.putBoolean(TangoConfig.KEY_BOOLEAN_LEARNINGMODE, true); 
     } 
    } 
    if (isLoadAdf) { 
     //加載ADF 
     ArrayList<String> fullUuidList; 
     fullUuidList = tango.listAreaDescriptions(); 
     if (fullUuidList.size() > 0) { 
      config.putString(TangoConfig.KEY_STRING_AREADESCRIPTION, 
        fullUuidList.get(fullUuidList.size() - 1)); 
     } 
    } 
    return config; 
} 

private void startupTango() { 
    Log.d(TAG, "startupTango"); 
    ArrayList<TangoCoordinateFramePair> framePairs = new ArrayList<>(); 
    //設置參考系,0,0,0點爲tango服務啓動時設備的位置,測量目標爲設備的位置 
    Log.d(TAG, "startup"); 
    framePairs.add(new TangoCoordinateFramePair(
      TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE, 
      TangoPoseData.COORDINATE_FRAME_DEVICE)); 
    Log.d(TAG, "startup-listener"); 
    mTango.connectListener(framePairs, new Tango.TangoUpdateCallback() { 
     @Override 
     public void onPoseAvailable(final TangoPoseData pose) { 
      //motion 
      Log.d(TAG, "onPoseAvailable"); 
      //獲取手機新的狀態 
      mTangoTime = pose.timestamp; 
      TangoPoseData poseData = TangoSupport.getPoseAtTime(
        mTangoTime, 
        TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE, 
        TangoPoseData.COORDINATE_FRAME_CAMERA_COLOR, 
        TangoSupport.ENGINE_OPENGL, 
        TangoSupport.ENGINE_OPENGL, 
        mDisplayRotation); 
      if (poseData.statusCode == TangoPoseData.POSE_VALID) { 
       mTangoPoseData = poseData; 
      } 
     } 

     @Override 
     public void onPointCloudAvailable(TangoPointCloudData pointCloud) { 
      //記錄當掃描到到的深度信息 
      mPointCloudManager.updatePointCloud(pointCloud); 
      Log.d(TAG, "depth size:" + pointCloud.numPoints); 
     } 

     @Override 
     public void onXyzIjAvailable(TangoXyzIjData xyzIj) { 
      Log.d(TAG, "onXyzIjAvailable"); 
     } 

     @Override 
     public void onFrameAvailable(int cameraId) { 
      Log.d(TAG, "onFrameAvailable"); 
     } 

     @Override 
     public void onTangoEvent(TangoEvent event) { 
      Log.d(TAG, event.eventValue); 
     } 
    }); 
    Log.d(TAG, "startup-listener-end"); 
} 


mTango.connect(mConfig);成功執行並無任何例外。
我一直困擾這個問題三天。我需要一個英雄。謝謝大家。
注意:由於我在其他地方使用後置攝像頭,因此不會使用後置攝像頭。

回答

0

我有同樣的問題。對我來說,解決方案是請求權限:

startActivityForResult(
    Tango.getRequestPermissionIntent(Tango.PERMISSIONTYPE_MOTION_TRACKING), 
    Tango.TANGO_INTENT_ACTIVITYCODE);