private void errorCallback(final String returnInfo) {
    if (geofencingCallbacks == null) {
      JSONObject returnErrorInfo = new JSONObject();
      try {
        returnErrorInfo.put("code", DGLocationStatus.PERMISSIONDENIED.getStatusCode());
        returnErrorInfo.put("message", "At first, Please call initCallbackForRegionMonitoring().");
      } catch (JSONException ex) {
        currentCallbacks.sendPluginResult(
            new PluginResult(PluginResult.Status.ERROR, ex.toString()));
        return;
      }

      currentCallbacks.sendPluginResult(
          new PluginResult(PluginResult.Status.ERROR, returnErrorInfo));
    } else {
      cordova
          .getThreadPool()
          .execute(
              new Runnable() {
                public void run() {

                  PluginResult result = new PluginResult(PluginResult.Status.ERROR, returnInfo);
                  result.setKeepCallback(true);
                  geofencingCallbacks.sendPluginResult(result);
                }
              });
    }
  }
  private boolean checkGeofencingAvailable() throws JSONException {
    if (!isLocationServicesEnabled()) {
      JSONObject returnInfo = new JSONObject();
      returnInfo.put("code", DGLocationStatus.PERMISSIONDENIED.getStatusCode());
      returnInfo.put("message", "Location services are disabled.");

      errorCallback(returnInfo);

      if (currentCallbacks != null) {
        currentCallbacks.error(returnInfo);
      }

      return false;
    } else if (!isGooglePlayServicesAvailable()) {
      JSONObject returnInfo = new JSONObject();
      returnInfo.put("code", DGGeofencingStatus.GEOFENCINGUNAVAILABLE.getStatusCode());
      returnInfo.put("message", "Geofencing services are disabled.");

      errorCallback(returnInfo);

      if (currentCallbacks != null) {
        currentCallbacks.error(returnInfo);
      }

      return false;
    }

    return true;
  }