2017-03-22 14 views
0

自分のスタンドアロンクラスを私のファントム4に接続することはできません。スタンドアロンクラスとして実装されているからです。 。コールバックには決して到達せず、データはデバイスから戻ってくることはありません。DJI Sdkはスタンドアロンクラスとして実装されても接続されません

パブリッククラスDjiManager {

private static DjiManager instance = null; 

private Context mContext; 
private DJIBaseProduct mProduct; 
private SendData mData; 
private DJIFlightController mFlightController = null; 
private Handler mConnectHandler = null; 
private Runnable mConnectRunnable = null; 

public DjiManager(Context context) { 
    mContext = context; 
    //start eventbus 
    EventBus.getDefault().register(this); 
    //set reference to data storage 
    mData = iOtManager.deviceData; 
    //Initialize DJI SDK Manager 
    initSdk(); 
} 

public static DjiManager getIntance(Context context) { 
    if (instance==null) { 
     instance = new DjiManager(context); 
    } 
    return instance; 
} 

public void shutDown() { 
    Log.d("DJI", "DGI Shutting down"); 
    //stop eventbus 
    EventBus.getDefault().unregister(this); 
    //stop the sdk 
    stopSdk(); 
    //clear data buffer reference 
    mData = null; 
    //clear instance 
    instance = null; 
} 

@Subscribe 
public void usbAttached(UsbAttachedEvent event) { 
    Log.d("DJI", "DGI Usb attached event"); 
    connectDrone(); 
} 

@Subscribe 
public void commandSent(SdkCommandSent event) { 

} 

private void stopSdk() { 
    Log.d("DJI", "DGI stopSdk"); 
    //shutdown geo interface 
    DJIFlyZoneManager.getInstance().setGEOSystemEnabled(false, new DJICommonCallbacks.DJICompletionCallback() { 
     @Override 
     public void onResult(DJIError djiError) { 
      if (null != djiError) { 
       Log.d("DJI", "Stopping Geo interface"); 
       Toast.showError((Activity) mContext, djiError.getDescription()); 
      } 
     } 
    }); 
    //stop connection 
    DJISDKManager.getInstance().stopConnectionToProduct(); 
} 

private void initSdk() { 
    //Initialize DJI SDK Manager 
    DJISDKManager.getInstance().initSDKManager(mContext, mDJISDKManagerCallback); 
} 

private void reInitSdk() { 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      initSdk(); 
     } 
    },5000); 
} 

private void connectDrone() { 
    if (mConnectHandler!=null && mConnectRunnable!=null) { 
     mConnectHandler.removeCallbacks(mConnectRunnable); 
    } 
    mConnectHandler = new Handler(); 
    mConnectRunnable = new Runnable() { 
     @Override 
     public void run() { 
      DJISDKManager.getInstance().startConnectionToProduct(); 
     } 
    }; 
    mConnectHandler.postDelayed(mConnectRunnable,1000); 
} 

private void setupCallbacks() { 
    //start geo sytem interface 
    Log.d("DJI", "Setting up callbacks"); 
    DJIFlyZoneManager.getInstance().setGEOSystemEnabled(true, new DJICommonCallbacks.DJICompletionCallback() { 
     @Override 
     public void onResult(DJIError djiError) { 
      if (null != djiError) { 
       Log.d("DJI", "Error in callbacks: " + djiError.getDescription()); 
       Toast.showError((Activity) mContext, djiError.getDescription()); 
      } else { 
       initFlightController(); 
      } 
     } 
    }); 
} 


private void initFlightController() { 
    if (isFlightControllerSupported()) { 
     Log.d("DJI", "Flight controller supported"); 
     mFlightController = ((DJIAircraft) DJISDKManager.getInstance().getDJIProduct()).getFlightController(); 
     mFlightController.setUpdateSystemStateCallback(new DJIFlightControllerDelegate.FlightControllerUpdateSystemStateCallback() { 
      @Override 
      public void onResult(final DJIFlightControllerCurrentState state) { 
       mData.sdk_speed_h = String.valueOf(state.getVelocityX()); 
       mData.sdk_speed_v = String.valueOf(state.getVelocityY()); 
       mData.sdk_lat = String.valueOf(state.getAircraftLocation().getLatitude()); 
       mData.sdk_lng = String.valueOf(state.getAircraftLocation().getLongitude()); 
       mData.sdk_altitude = String.valueOf(state.getUltrasonicHeight()); 
      } 
     }); 
    } else { 
     Log.d("DJI", "Flight controller not supported"); 
     connectDrone(); 
    } 
} 
private boolean isFlightControllerSupported() { 
    return DJISDKManager.getInstance().getDJIProduct() != null && 
      DJISDKManager.getInstance().getDJIProduct() instanceof DJIAircraft && 
      ((DJIAircraft) DJISDKManager.getInstance().getDJIProduct()).getFlightController() != null; 
} 












//CALLBACKS 

private DJISDKManager.DJISDKManagerCallback mDJISDKManagerCallback = new DJISDKManager.DJISDKManagerCallback() { 
    @Override 
    public void onGetRegisteredResult(DJIError error) { 
     Log.d("DJI", error == null ? "success" : error.getDescription()); 
     if(error == DJISDKError.REGISTRATION_SUCCESS) { 
      connectDrone(); 
      Handler handler = new Handler(Looper.getMainLooper()); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        Log.d("DJI", "DGI Registration Succcessfull!"); 
       } 
      }); 
     } else { 
      Handler handler = new Handler(Looper.getMainLooper()); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        Log.d("DJI", "Register App Failed! Please enter your App Key and check the network."); 
        Toast.showError((Activity) mContext, "The purplebox failed to connect to a Dji Drone"); 
        reInitSdk(); 
       } 
      }); 
     } 
    } 
    @Override 
    public void onProductChanged(DJIBaseProduct oldProduct, DJIBaseProduct newProduct) { 
     mProduct = newProduct; 
     if(mProduct != null) { 
      Log.d("DJI", "Product found: " + newProduct.getModel()); 
      mProduct.setDJIBaseProductListener(mDJIBaseProductListener); 
      //setup product 
      setupCallbacks(); 
     } else { 
      Log.d("DJI", "Product Not Found, reconnecting..."); 
      //connectDrone(); 
     } 
    } 
}; 

private DJIBaseProduct.DJIBaseProductListener mDJIBaseProductListener = new DJIBaseProduct.DJIBaseProductListener() { 
    @Override 
    public void onComponentChange(DJIBaseProduct.DJIComponentKey key, DJIBaseComponent oldComponent, DJIBaseComponent newComponent) { 
     Log.d("DJI", "Component Changed"); 
    } 
    @Override 
    public void onProductConnectivityChanged(boolean isConnected) { 
     Log.d("DJI", "DGI Connected: " + isConnected); 
    } 
}; 

}

答えて

0

あなたがregisterApp呼び出されていなかったようです。 代わりにUSB接続を探すように見えます。

関連する問題