示例#1
0
  synchronized void start() {
    if (!serviceMgr.isTowerConnected())
      throw new IllegalStateException("Service manager must be connected.");

    IDroneApi droneApi = droneApiRef.get();
    if (isStarted(droneApi)) return;

    try {
      droneApi =
          serviceMgr
              .get3drServices()
              .registerDroneApi(this.apiListener, serviceMgr.getApplicationId());
      droneApi.asBinder().linkToDeath(binderDeathRecipient, 0);
    } catch (RemoteException e) {
      throw new IllegalStateException("Unable to retrieve a valid drone handle.");
    }

    if (asyncScheduler == null || asyncScheduler.isShutdown())
      asyncScheduler = Executors.newFixedThreadPool(1);

    addAttributesObserver(droneApi, this.droneObserver);
    resetFlightTimer();

    droneApiRef.set(droneApi);
  }
示例#2
0
 private void handleRemoteException(RemoteException e) {
   final IDroneApi droneApi = droneApiRef.get();
   if (droneApi != null && !droneApi.asBinder().pingBinder()) {
     final String errorMsg = e.getMessage();
     Log.e(TAG, errorMsg, e);
     notifyDroneServiceInterrupted(errorMsg);
   }
 }
示例#3
0
  synchronized void destroy() {
    IDroneApi droneApi = droneApiRef.get();

    removeAttributesObserver(droneApi, this.droneObserver);

    try {
      if (isStarted(droneApi)) {
        droneApi.asBinder().unlinkToDeath(binderDeathRecipient, 0);
        serviceMgr.get3drServices().releaseDroneApi(droneApi);
      }
    } catch (RemoteException | NoSuchElementException e) {
      Log.e(TAG, e.getMessage(), e);
    }

    if (asyncScheduler != null) {
      asyncScheduler.shutdownNow();
      asyncScheduler = null;
    }

    droneApiRef.set(null);
  }
示例#4
0
 private boolean isStarted(IDroneApi droneApi) {
   return droneApi != null && droneApi.asBinder().pingBinder();
 }