code: protected void refreshDeviceCache(final BluetoothGatt gatt, final boolean force) {
  		/*
  		 * If the device is bonded this is up to the Service Changed characteristic to notify Android that the services has changed.
  		 * There is no need for this trick in that case.
  		 * If not bonded, the Android should not keep the services cached when the Service Changed characteristic is present in the target device database.
  		 * However, due to the Android bug (still exists in Android 5.0.1), it is keeping them anyway and the only way to clear services is by using this hidden refresh method.
  		 */
  		if (force || gatt.getDevice().getBondState() == BluetoothDevice.BOND_NONE) {
  			sendLogBroadcast(LOG_LEVEL_DEBUG, "gatt.refresh() (hidden)");
  			/*
  			 * There is a refresh() method in BluetoothGatt class but for now it's hidden. We will call it using reflections.
  			 */
  			try {
  				//noinspection JavaReflectionMemberAccess
  				final Method refresh = gatt.getClass().getMethod("refresh");
  				final boolean success = (Boolean) refresh.invoke(gatt);
  				logi("Refreshing result: " + success);
  			} catch (Exception e) {
  				loge("An exception occurred while refreshing device", e);
  				sendLogBroadcast(LOG_LEVEL_WARNING, "Refreshing failed");
  			}
  		}
  	}
docs: Clears the device cache. After uploading new firmware the DFU target will have other
  services than before.
  
  @param gatt  the GATT device to be refreshed.
  @param force <code>true</code> to force the refresh.